java集合set不能去重_java集合去重和排序

1.去重

1.1 for循环去重

for (int i = 0; i

list.remove(j);

j--;

}

}

}

测试结果:

23b021d11d75bd74e4f18fbbcb23d098.png,感觉还是有点用的,感觉循环次数太多了,不推荐使用。

List list = new LinkedList();

List list1 = new LinkedList();

Random random= newRandom();int s=0;while (s<50) {

list.add(random.nextInt(10));

s++;

}

System.out.println("去重前"+list);for(Integer temp:list) {if (!list1.contains(temp)) { //判断list1中是否存在这个元素,不存在就保存进去

list1.add(temp);

}

}

list=list1;

System.out.println("去重后" + list);

第二种,可以用用。

1.2 set去重

set集合的提点是无序,不能重复,所以如果把list先存进set集合中,重复元素就没了,之后再取出,重现放进list就可以了,但这个方法有一个缺点,就是原来list元素的顺序会被打乱,如果对顺序有要求的话不推荐使用。

List list = new LinkedList();

Set set = new HashSet();

Random random= newRandom();int s=0;while (s<50) {

list.add(random.nextInt(10));

s++;

}

System.out.println("去重前"+list);for(Integer temp:list) {

set.add(temp);

}

list.clear();for(Integer temps:set) {

list.add(temps);

}

System.out.println("去重后" + list);

1.3 map去重

hashmap的key是不能重复的,value是可以重复的,所以我们可以把list的值当做map的key,这样就可以把重复的值去掉了

List list = new LinkedList();

Map map = new HashMap();

Random random= newRandom();int s=0;while (s<50) {

list.add(random.nextInt(10));

s++;

}

System.out.println("去重前"+list);for(Integer temp:list) {

map.put(temp,"value");

}

list.clear();for (intkey : map.keySet()){

list.add(key);

}

System.out.println("去重后" + list);

2.排序

排序一般是用集合工具类中的sort()方法,这个方法还有一个重载的方法,下面分别来介绍并测试一下。

2.1 Collections.sort(list)

直接调用sort方法,就可以了,排序方式是升序

List list = new LinkedList();

Random random= newRandom();int s=0;while (s<10) {

list.add(random.nextInt(10));

s++;

}

System.out.println("排序前"+list);

Collections.sort(list);

System.out.println("排序后" + list);

2.2 Collections.sort(list,Comparator<>)

这个重载方法主要用来帮对象排序,自定义排序

先创建一个实体类 dog类

public classdog {private intid;privateString name;privateString sex;public dog(intid,String name,String sex) {this.id=id;this.name =name;this.sex =sex;

}public intgetId() {returnid;

}public void setId(intid) {this.id =id;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}publicString getSex() {returnsex;

}public voidsetSex(String sex) {this.sex =sex;

}

}

之后就是调用sort方法,并且实现Comparator接口,实现里面的compare方法。

List list = new LinkedList();int s=10;while (s>0) {

list.add(new dog(s,"南波万","雄"));

s--;

}for(dog o:list) {

System.out.println(o.getId());

}

Collections.sort(list,new Comparator() {public intcompare(dog o1, dog o2) {if (o1.getId() >o2.getId()) {return 1;

}else if (o1.getId()

}else{return 0;

}

}

});

System.out.println("排序后");for(dog o : list) {

System.out.println(o.getId());

因为我的排序字段是id,就用了id做比较,大于返回正数,一般都是为1,小于返回负数,一般都是-1,等于返回0

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值