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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 阿里云API接口调用[通俗易懂]

    阿里云API接口调用[通俗易懂]阿里云针对自己的平台提供了非常丰富的API接口,而且他们有提供openapi可视化服务,非常方便。阿里云openapi地址:https://api.aliyun.com/这里我在查询全部RDS资产

    2022年7月3日
    85
  • 【Spring】代理模式:静态代理

    【Spring】代理模式:静态代理为什么要学代理模式?因为这就是SpringAOP的底层!【面试时,SpringAOP和SpringMVC一定会问】代理模式的分类:静态代理 动态代理静态代理角色分析:抽象角色:一般会使用接口或抽象类来解决 真是角色:被代理的角色 代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作 客户:访问代理对象的人!代码步骤:接口(Rent.java)packagecom.company.org;publicinterfaceRent{pu

    2022年10月17日
    3
  • android项目开发实战(android简单app实例代码)

    项目名:HoseWork完成时间:2018-10-01~2018-10-10性质:个人项目Demo地址:点击:https://github.com/FishInWater-1999/Android-app运行效果:产品介绍:学习星是一款面向广大学生、终生学习者打造的课程类app,集成了C,C++,Java,python,C#,JavaScript等十几种编程语言的学…

    2022年4月18日
    107
  • 怎样发外链,使网站能快速收录,秒收录

    怎样发外链,使网站能快速收录,秒收录本文来自:优优蜘蛛池(http://www.zhizhuchi.vip)1.首先就是大家都熟知的百度网站提交2.利数桥带族用的周边产品添加网站的外链吸引蜘蛛进入你的网站。3.写一篇原创文章加上自己的网站链接后投稿到大型的站长网站。4.到高权重的论坛注册账号,这个人签名里添加上自己网站的超链接,发发贴,顶顶贴,就能无形中增加了。2:利用公司名字和地址在分类信息做外链。3:利用论坛昵称做高质量外链。4:在帖子内容中巧带二级域名链接。SEO优化之网站怎么实现百度秒收录何谓”秒收录”?大家可以经常

    2022年5月17日
    53
  • phpstorm2021.11激活码【2021免费激活】[通俗易懂]

    (phpstorm2021.11激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~92U4ILM59M-eyJsaWNlb…

    2022年3月29日
    55
  • Verilog hdl与VHDL混用详解

    Verilog hdl与VHDL混用详解Veriloghdl与VHDL混用详解1.概述由于在FPGA开发过程中,多人合作时可能遇到有人使用veriloghdl,有人遇到VHDL的情况,这就涉及到了veriloghdl与VHDL的相…

    2022年9月21日
    1

发表回复

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

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