Java实现的数组去重与排序操作详解
本文实例讲述了Java实现的数组去重与排序操作。分享给大家供大家参考,具体如下:
这里演示Java实现数组去重、排序操作
文中的示例源码编写基于Jdk1.6+、junit4.8.2
java.util.Arrays.sort()
支持对int[],long[],short[],char[],byte[],float[],double[],Object[]进行排序
参考示例代码片段如下
//声明int数组,并初始化 int[]intArry={5,4,7,8,2,0,1,9,3,6,10}; //对int数组进行排序 Arrays.sort(intArry);
Junit测试类源码:
packagecom.gjnote.test.array; importjava.util.Arrays; importorg.junit.Test; publicclassTestArraysSort{ //声明int数组,并初始化 int[]intArry={5,4,7,8,2,0,1,9,3,6,10}; @Test publicvoidtest(){ //对int数组进行排序 Arrays.sort(intArry); for(inti=0;i<intArry.length;i++){ System.out.println(intArry[i]); } System.out.println(Arrays.toString(intArry)); } }
控制台输出
0
1
2
3
4
5
6
7
8
9
10
[0,1,2,3,4,5,6,7,8,9,10]
java.util.Collections.sort()
通过实现内部compare方法实现对象的比较
示例代码片段如下
/** *使用Collections.sort(list,Comparator(){}); *对List数组排序推荐使用方法 */ publicvoidcollectionsSortElement1(Listlist){ Collections.sort(list,newComparator(){ @Override publicintcompare(Stringo1,Stringo2){ //根据实际排序需要调整compareTo对象顺序 return(o2).compareTo(o1); } }); }
Java实现对List去重
方式一,使用for循环遍历去除List中的重复元素
代码片段如下
ListtempList=newArrayList(); //去除原始List中的重复元素 for(Stringstring:originalList){ if(!tempList.contains(string)){ tempList.add(string); } }
方式二,使用Set去重
代码片段如下
//Set利用Set元素唯一性,去重 Setset=newHashSet(originalList); ListtempList=newArrayList(set);
方式三,使用TreeSet去除重复元素
TreeSettreeSet=newTreeSet(originalList); ListtempList=newArrayList(); tempList.addAll(treeSet); //treeSet默认的排序为升序,根据实际情况添加是否需要反排序 Collections.reverse(tempList);
Java实现对List去重后排序
Junit测试List去重及排序源码
packagecom.gjnote.test.array; importjava.util.ArrayList; importjava.util.Collections; importjava.util.Comparator; importjava.util.HashSet; importjava.util.List; importjava.util.Set; importjava.util.TreeSet; importorg.junit.Before; importorg.junit.Test; /** *TestClass * List数组去重元素排序 * *@version1.0 *@authorwww.gjnote.com * */ publicclassTestListArraySort{ privateListoriginalList=null; @Before publicvoidsetUp()throwsException{ originalList=newArrayList(); for(inti=10000;i>0;i--){ originalList.add("element"+i); //addrepeatelement if(i%2==0){ originalList.add("element"+i); } } } /** *输出List元素 *@paramlist */ privatevoidoutputList(Listlist){ for(inti=0;i<list.size();i++){ System.out.println(list.get(i)); } } /** *使用Collections.sort(list,Comparator(){}); *排序推荐方法 */ privatevoidcollectionsSortElement(Listlist){ longstart=System.currentTimeMillis(); Collections.sort(list,newComparator(){ @Override publicintcompare(Stringo1,Stringo2){ //根据实际排序需要调整compareTo对象顺序 returno2.compareTo(o1); } }); //outputList(tempList); System.out.println("Collections.sort:" +(System.currentTimeMillis()-start)+"ms"); } /** *测试使用for循环遍历去除重复元素 *Collections.sort排序 */ @Test publicvoidtestForLoopRemoveRepeatElement(){ System.out.println("testForLoopRemoveRepeatElement"); longstart=System.currentTimeMillis(); ListtempList=newArrayList(); //去除重复元素 for(Stringstring:originalList){ if(!tempList.contains(string)){ tempList.add(string); } } //排序 collectionsSortElement(tempList); //outputList(tempList); System.out.println("使用for循环遍历List,去除重复元素:" +(System.currentTimeMillis()-start)+"ms"); } /** *测试使用Set去重; *使用Collections.sort(list,Comparator(){});排序 * */ @Test publicvoidtestSetRemoveRepeatElement(){ System.out.println("testSetRemoveRepeatElement"); longstart=System.currentTimeMillis(); //先排序(理论值:先排序后去重会比后排序效率更高) collectionsSortElement(originalList); //Set利用Set元素唯一性,去重 Setset=newHashSet(originalList); ListtempList=newArrayList(set); //后排序可以注释先排序,开启后排序试试运行时间 //collectionsSortElement(tempList); //outputList(tempList); System.out.println("Collections.sort排序,使用Set去重:" +(System.currentTimeMillis()-start)+"ms"); } /** *测试使用TreeSet去除重复元素 *默认排序或Collections.reverse翻转排序 */ @Test publicvoidtestTreeSetRemoveRepeatElement(){ System.out.println("testTreeSetRemoveRepeatElement"); longstart=System.currentTimeMillis(); TreeSettreeSet=newTreeSet(originalList); ListtempList=newArrayList(); tempList.addAll(treeSet); //treeSet默认的排序为升序,根据实际情况添加是否需要反排序 Collections.reverse(tempList); //outputList(tempList); System.out.println("使用TreeSet排序,去除重复元素:" +(System.currentTimeMillis()-start)+"ms"); } @Test publicvoidtestMethods(){ //outputList(originalList); //List去重推荐方法 testSetRemoveRepeatElement();//14ms testTreeSetRemoveRepeatElement();//20ms //testForLoopRemoveRepeatElement();//2525ms } }
运行testSetRemoveRepeatElement()控制台输出结果
testSetRemoveRepeatElement
Collections.sort:8ms
Collections.sort排序,使用Set去重:14ms
运行testTreeSetRemoveRepeatElement()控制台输出结果
testTreeSetRemoveRepeatElement
使用TreeSet排序,去除重复元素:20ms
运行testForLoopRemoveRepeatElement()控制台输出结果
testForLoopRemoveRepeatElement
Collections.sort:7ms
使用for循环遍历List,去除重复元素:2525ms
PS:这里再为大家提供几款相关工具供大家参考使用:
在线去除重复项工具:
http://tools.jb51.net/code/quchong
在线文本去重复工具:
http://tools.jb51.net/aideddesign/txt_quchong
在线动画演示插入/选择/冒泡/归并/希尔/快速排序算法过程工具:
http://tools.jb51.net/aideddesign/paixu_ys
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。