1.Set接口概述
①Set接口是Collection的子接口,set接口没有提供额外的方法;
②Set 存储无序的,不可重复的数据;
③Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals() 方法。
2.HashSet,LinkedHashSet,TreeSet
①HashSet:作为Set的主要实现类,线程不安全的,可以存储null值。
②LinkedHashSet:作为HashSet的子类,遍历其内部数据时,可以按照添加的顺序遍历。
③TreeSet:可以按照添加对象的指定属性,进行排序。
3.重写hashCode()和equals()
要求:
向Set中添加的数据,其所在的类一定要重写hashCode()和equals()。 重写hashCode()和equals()尽可能保持一致:相等的对象必须具有相等的散列码
①重写 hashCode() 方法的基本原则:
a.在程序运行时,同一个对象多次调用 hashCode() 方法应该返回相同的值。
b.当两个对象的 equals() 方法比较返回 true 时,这两个对象的 hashCode()方法的返回值也应相等。
c.对象中用作 equals() 方法比较的 Field,都应该用来计算 hashCode 值。
②重写 equals() 方法的基本原则:
a.相等的对象必须具有相等的散列码。
b.复写equals方法的时候一般都需要同时复写hashCode方法。通常参与计算hashCode的对象的属性也应该参与到equals()中进行计算。
4.Set接口:无序性,不可重复性
以HashSet为例说明:
①无序性:不等于随机性,存储时数据在底层数组中并非按照数组索引的顺序添加,而是根据数据的哈希值决定的。
②不可重复性:保证添加的元素按照equals()判断时,不能返回true,即:相同的元素只能添加一个。
@Test
public void test(){
Set set=new HashSet();
set.add(456);
set.add(123);
set.add("AA");
set.