java数组去重「建议收藏」

java数组去重「建议收藏」1、背景根据不同的业务逻辑,经常会遇到数组中存在多个重复元素的场合,总结了下数组的排序,留个记录。2、实现方法总结了四种方法,接下来进行展示1、方法一[java] viewplain copy               //数组去重方法一  String[] array 

大家好,又见面了,我是你们的朋友全栈君。

1、背景

根据不同的业务逻辑,经常会遇到数组中存在多个重复元素的场合,总结了下数组的排序,留个记录。

2、实现方法


总结了四种方法,接下来进行展示

1、方法一

[java] 
view plain  
copy

 
在CODE上查看代码片
派生到我的代码片

  1.               //数组去重方法一  
  2. String[] array = {
    “a”,“b”,“c”,“c”,“d”,“e”,“e”,“e”,“a”};  
  3. List<String> result = new ArrayList<>();  
  4. boolean flag;  
  5. for(int i=0;i<array.length;i++){  
  6.     flag = false;  
  7.     for(int j=0;j<result.size();j++){  
  8.         if(array[i].equals(result.get(j))){  
  9.             flag = true;  
  10.             break;  
  11.         }  
  12.     }  
  13.     if(!flag){  
  14.         result.add(array[i]);  
  15.     }  
  16. }  
  17. String[] arrayResult = (String[]) result.toArray(new String[result.size()]);  
  18. System.out.println(Arrays.toString(arrayResult));  

先遍历原数组,然后遍历结束集,通过每个数组的元素和结果集中的元素进行比对,若相同则break。若不相同,则存入结果集。

两层循环进行遍历得出最终结果。

2、方法二

[java] 
view plain  
copy

 
在CODE上查看代码片
派生到我的代码片

  1. //数组去重方法二  
  2. String[] array = {
    “a”,“b”,“c”,“c”,“d”,“e”,“e”,“e”,“a”};  
  3. List<String> list = new ArrayList<>();  
  4. list.add(array[0]);  
  5. for(int i=1;i<array.length;i++){  
  6.     if(list.toString().indexOf(array[i]) == –1){  
  7.             list.add(array[i]);  
  8.     }  
  9. }  
  10. String[] arrayResult = (String[]) list.toArray(new String[list.size()]);  
  11. System.out.println(Arrays.toString(arrayResult));  

通过使用indexOf方法进行判断结果集中是否存在了数组元素。


3、方法三

[java] 
view plain  
copy

 
在CODE上查看代码片
派生到我的代码片

  1. //数组去重方法三  
  2. String[] array = {
    “a”,“b”,“c”,“c”,“d”,“e”,“e”,“e”,“a”};  
  3. List<String> list = new ArrayList<>();  
  4. for(int i=0;i<array.length;i++){  
  5.     for(int j=i+1;j<array.length;j++){  
  6.         if(array[i] == array[j]){  
  7.             j = ++i;  
  8.         }  
  9.     }  
  10.     list.add(array[i]);  
  11. }  
  12. String[] arrayResult = (String[]) list.toArray(new String[list.size()]);  
  13. System.out.println(Arrays.toString(arrayResult));  

嵌套循环,进行比较获取满足条件结果集。


4、方法四

[java] 
view plain  
copy

 
在CODE上查看代码片
派生到我的代码片

  1.         //数组去重方法四  
  2.         String[] array = {
    “a”,“b”,“c”,“c”,“d”,“e”,“e”,“e”,“a”};  
  3.         Arrays.sort(array);  
  4.         List<String> list = new ArrayList<>();  
  5.         list.add(array[0]);  
  6.         for(int i=1;i<array.length;i++){  
  7.             if(!array[i].equals(list.get(list.size()-1))){  
  8.                 list.add(array[i]);  
  9.             }  
  10.         }  
  11. <pre name=“code” class=“java”><span style=“white-space:pre”>        </span>String[] arrayResult = (String[]) list.toArray(new String[list.size()]);  

System.out.println(Arrays.toString(arrayResult));


先使用java提供的数组排序方法进行排序,然后进行一层for循环,进行相邻数据的比较即可获得最终结果集。

5、方法五

[java] 
view plain  
copy

 
在CODE上查看代码片
派生到我的代码片

  1. //数组去重方法五  
  2.         String[] array = {
    “a”,“b”,“c”,“c”,“d”,“e”,“e”,“e”,“a”};  
  3.         Set<String> set = new HashSet<>();  
  4.         for(int i=0;i<array.length;i++){  
  5.             set.add(array[i]);  
  6.         }  
  7.         String[] arrayResult = (String[]) set.toArray(new String[set.size()]);  
  8.         System.out.println(Arrays.toString(arrayResult));  

感谢
漂泊一剑客
 的提议,加入set方法进行添加,虽然是无序排列,但是也更方便的解决了去重的问题。

3、知识说明

1、ArrayList集合转数组

[java] 
view plain  
copy

 
在CODE上查看代码片
派生到我的代码片

  1. String[] arrayResult = (String[]) list.toArray(new String[list.size()]);  

对应的java方法API

toArray

public Object[] toArray()
Returns an array containing all of the elements in this list in proper sequence (from first to last element).

The returned array will be “safe” in that no references to it are maintained by this list. (In other words, this method must allocate a new array). The caller is thus free to modify the returned array.

This method acts as bridge between array-based and collection-based APIs.

Specified by:

toArray in interface 
Collection<E>

Specified by:

toArray in interface 
List<E>

Overrides:

toArray in class 
AbstractCollection<E>
Returns:

an array containing all of the elements in this list in proper sequence

See Also:

Arrays.asList(Object[])



toArray

public <T> T[] toArray(T[] a)
Returns an array containing all of the elements in this list in proper sequence (from first to last element); the runtime type of the returned array is that of the specified array. If the list fits in the specified array, it is returned therein. Otherwise, a new array is allocated with the runtime type of the specified array and the size of this list.

If the list fits in the specified array with room to spare (i.e., the array has more elements than the list), the element in the array immediately following the end of the collection is set to null. (This is useful in determining the length of the list only if the caller knows that the list does not contain any null elements.)

Specified by:

toArray in interface 
Collection<E>

Specified by:

toArray in interface 
List<E>

Overrides:

toArray in class 
AbstractCollection<E>
Parameters:

a – the array into which the elements of the list are to be stored, if it is big enough; otherwise, a new array of the same runtime type is allocated for this purpose.

Returns:

an array containing the elements of the list

Throws:

ArrayStoreException – if the runtime type of the specified array is not a supertype of the runtime type of every element in this list
NullPointerException – if the specified array is null

2、数组直接打印到控制台


直接调用Arrays的toString方法进行转换再进行打印操作。
实例:
[java] 
view plain  
copy

 
在CODE上查看代码片
派生到我的代码片

  1. System.out.println(Arrays.toString(arrayResult));  

4、总结


仅仅是根据自己想法进行总结,肯定还有更多更优的方法能够去实现,希望大神指出教导。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147821.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • windows搭建svn_pokemmo中文语言包

    windows搭建svn_pokemmo中文语言包上一篇文章讲了如何下载安装SVN,装的原生的SVN,并没有进行相应的配置,这里进行配置SVN官方语言包还没有安装的移步安装教程——>Windows搭建SVN实现访问远程SVN库首先我们打开svn下载界面(点击可进入)往下翻即可看到语言包,这是各个国家不同的语言包,我使用的是中文的语言包,选择中文简体(第一个)下载完成,点击开始安装吧妥妥的下一步啊喏,直接安装完成,勾选下面,配置svn使用此语言包【注意,勾选,勾选,勾选】(没有勾选?成吧,继续往下…

    2022年9月3日
  • Java判断闰年

    Java判断闰年importjava.util.Scanner;/**判断某一年是否为闰年*通过Scanner输入一个年份,然后判断该年是否是闰年*闰年判断标准(满足任何一个)*1.如果能够被4整除,但是不能被100整除*2.能够被400整除*/publicclassHelloWorld{ publicstaticvoidmain(String[]args){ while(true) { System.out.println(“请输入年份:”); Scanner

    2022年7月9日
  • 解决JetBrains 账户连接错误,hosts下并没有0.0.0.0 account.jetbrains.com问题

    解决JetBrains 账户连接错误,hosts下并没有0.0.0.0 account.jetbrains.com问题JetBrains帐户连接错误:连接超时:连接您的主机可能在代理的后面。PhpStorm无法检测到您的代理配置。您可能希望指定HTTPS代理参数,然后重试。代理主机:代理端口:onedetermine我的hosts下面并没有0.0.0.0 account.jetbrains.com0.0.0.0www.jetbrains.com这里修改了下我本机的DNS改为 114….

    2022年8月18日
  • adventureworksdw2008r2_数据库表例子

    adventureworksdw2008r2_数据库表例子从观望

    2022年9月12日
  • 3-UFT对象管理

    3-UFT对象管理UFT对象的管理

    2022年5月28日
  • 不止一个背包的背包问题_背包问题 java

    不止一个背包的背包问题_背包问题 java有 N 个物品和一个容量是 V 的背包。物品之间具有依赖关系,且依赖关系组成一棵树的形状。如果选择一个物品,则必须选择它的父节点。如下图所示:如果选择物品5,则必须选择物品1和2。这是因为2是5的父节点,1是2的父节点。每件物品的编号是 i,体积是 vi,价值是 wi,依赖的父节点编号是 pi。物品的下标范围是 1…N。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品个数和背包容量。接下来有 N

    2022年8月9日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号