ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

List去重的几种方法

2021-11-24 15:35:04  阅读:213  来源: 互联网

标签:aa ss List lists 几种 new 排序 方法


//HashSet是通过Hashcode和equals去重
//Treeset默认是通过自然排序接口去重

//colections.sort() 或者List.sort()不能去重,因为使用的是排序算法(比如jdk6的归并排序,jdk7的二叉排序)

@Test
public void test1() {

List lists = Arrays.asList(“aa”, “a”, “AA”, “aa”, “bb”, “cc”,
“ss”, “ss”);
List lists2 = new ArrayList();
// 方式1:遍历每个元素,使用新集合添加的时候进行重复判断 保持了原来的顺序
for (String s1 : lists) {
if (!lists2.contains(s1)) {
lists2.add(s1);
}
}
//为了避免内存浪费
lists=null;
System.out.println(lists2);

}

@Test
public void test2() {
//保留了原来的排序
List lists = Arrays.asList(“aa”,“a”,“AA”,“aa”,“bb”,“cc”,“ss”,“ss”,“ss”,“aa”,“aa”);
//因为:Arrays.asList()返回一个受指定数组支持的固定大小的列表。所以不能做Add、Remove等操作。
lists=new ArrayList(lists);
for (int i = 0; i < lists.size()-1; i++) {
for (int j =lists.size()-1 ; j >i; j–) {
if (lists.get(i).equals(lists.get(j))) {
lists.remove(j);
}
}
}
// 或者
// for (int i = 0; i < lists.size()-1; i++) {
// for (int j = i+1; j < lists.size(); j++) {
// if (lists.get(i).equals(lists.get(j))) {
// //注意在删除时有一个顶替的过程
// lists.remove(j);
// j–;
// }
// }
// }
System.out.println(lists);
}

@Test
public void test3() {
List lists = Arrays.asList(“aa”,“a”,“AA”,“aa”,“bb”,“cc”,“ss”,“ss”);

//使用TreeSet的排序去重,结果是排序之后的
// lists=new ArrayList(new TreeSet(lists));
// System.out.println(“去重1:”+lists);

//使用HashSet的排序去重,结果是排序是随机的
// lists=new ArrayList(new HashSet(lists));
// System.out.println(“去重2:”+lists);

// 使用LinkedHashSet的排序去重,结果是原来的排序 (推荐)
lists=new ArrayList(new LinkedHashSet(lists));
System.out.println(“去重3:”+lists);

}

// 使用Collections.frequency ,看底层源码,他会统计每个元素的个数,所以性能不好
@Test
public void test4() {
//不能保持原来的排序,会删除第一个出现的重复值
// Collections.frequency(Collection Object o):返回指定集合中指定对象出现的次数
List lists = Arrays.asList(“d”,“aa”,“a”,“AA”,“aa”,“bb”,“aa”,“cc”,“ss”,“ss”,“ss”);
lists=new ArrayList(lists);

for (int i = 0; i < lists.size(); i++) {
//如果一个元素出现2次以上,删除这个元素
if ( Collections.frequency(lists, lists.get(i))>1) {
lists.remove(i);
}
}
System.out.println(lists);
}

//Stream java8
@Test
public void test5() {
List lists = Arrays.asList(“d”,“aa”,“a”,“AA”,“aa”,“bb”,“aa”,“cc”,“ss”,“ss”,“ss”);
//distinct根据hashcode和equals来去重
lists = lists.stream().distinct().collect(Collectors.toList());
System.out.println(lists);
}

标签:aa,ss,List,lists,几种,new,排序,方法
来源: https://blog.csdn.net/keepmoving010/article/details/121507371

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有