J2EE 快速入门之第二章 Set集合详解

本文介绍了J2EE中的Set集合,详细讲解了Collection与ArrayList的remove方法区别,展示了ArrayList去重的方法,并探讨了HashSet与TreeSet的特性。内容包括Set接口介绍,HashSet的无序性与去重原理,以及TreeSet的排序机制和泛型的应用。最后,文章提出了ArrayList去重、List与Set转换、以及TreeSet排序等相关问题。
摘要由CSDN通过智能技术生成

一:Collection.remove()ArrayList.remove()方法的不同

           1. Collection 中只能根据元素移除
           2.ArrayList 可以根据元素删除 , 也可以根据下标删除

二:完成ArrayList去重的案例

   观察以下代码 , 并得出代码执行后的结果
Dog d = new Dog("小黑",5);
List<Dog> ls=new ArrayList<Dog>();
ls.add(d);
ls.add(d);
ls.add(d);
System.out.println(ls.size());
    得出结果后推导原因: List 接口的特点之一就是可重复

     问:如何在ArrayList出完成去除重复值的功能

     答: 使用 contains方法进行判断,判断新的集合newLs是否包含指定的元素,如果包含,那么不添加新集合中,如果不包含,那么添加到 新集合中
 
           
public static List<Dog> singleList(List<Dog> oldLs) {
List<Dog> newLs = new ArrayList<Dog>();// 去除重复值之后的集合
for (Dog d : oldLs) {// 遍历需要去除重复值的集合
if (!newLs.contains(d)) {// 如果在新集合中不存在
newLs.add(d);// 加入到新集合中
}
}
return newLs;
}
写完方法之后再调用之前的案例查看结果
Dog d = new Dog("小黑",5);
List<Dog> ls = new ArrayList<Dog>();
ls.add(d);
ls.add(d);
ls.add(d);
List<Dog> newLs = singleList(ls);
System.out.println("集合:"+newLs);
System.out.println("长度:"+newLs.size());
输出结果:
集合:[Dog [name=小黑, age=5]]
长度:1
换种方式在试:
Dog d1 = new Dog("小黑",5);
Dog d2 = new Dog("小黑",5);
Dog d3 = new Dog("小黑",5);
List<Dog> ls = new ArrayList<Dog>();
ls.add(d1);
ls.add(d2);
ls.add(d3);
List<Dog> newLs = singleList(ls);
System.out.println("集合:"+newLs);
System.out.println("长度:"+newLs.size());



输出结果 :
集合:[Dog [name=小黑, age=5], Dog [name=小黑, age=5], Dog [name=小黑,
age=5]]
 长度:3
  • == equals 的区别:

      == 比较的对象在内存中的地址
      equals 比较的是对象的内容(通过重写方法,可以自定义判断规则)
在没有重写 equals 的情况下 默认使用的是 Object 类的 equals 比较的是对象在内存中的
地址
重写 Dog equals 方法
     
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Dog other = (Dog) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
重写了equals方法,判断只要名字相同,就认为是同一只狗
重新执行上面的代码,输出结果:
集合:[Dog [name=小黑, age=1]]
长度:1
讲解原理:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值