集合(3)Set接口的使用
Set接口的使用其实与前面所讲到的ArrayList一样。
//创建集合 Set<String> set = new HashSet<>();
然后添加、删除、遍历、判断元素都一样。
但是Set的特点是无序、无下标、元素不重复。
HashSet的存储结构是哈希表(数组+链表+红黑树)
其存储过程
(1)根据hashcode计算保存的位置,如果此位置为空,则直接保存,否则执行第二部 (2)再执行equals方法,如果equals为true,则认为是重复,不会存入,如果为false,则形成链表
所以这里有一点要注意
package gather.Set.HashSet; import java.util.HashSet; /** * HashSet的使用 * 存储结构:哈希表(数组+链表+红黑树) * 存储过程: * (1)根据hashcode计算保存的位置,如果此位置为空,则直接保存,否则执行第二部 * (2)再执行equals方法,如果equals为true,则认为是重复,不会存入,如果为false,则形成链表 * @author 长空扯淡 */ public class DemoPerson { public static void main(String[] args) { //创建集合 HashSet<Person> hashSet = new HashSet<>(); //创建对象 Person p1 = new Person("周慧敏",20); Person p2 = new Person("朱茵",20); Person p3 = new Person("张敏",20); //添加 hashSet.add(p1); hashSet.add(p2); hashSet.add(p3); //hashSet.add(p3);//重复 不会添加 hashSet.add(new Person("周慧敏",20));//可以添加,为什么可以添加,如下图 //当重写equals之后,元素进行比较是重复的,就添加不进去了 System.out.println("元素个数:"+hashSet.size()); System.out.println(hashSet.toString()); //删除 //遍历 //判断 } }

TreeSet有一个注意点
当使用treeset集合添加对象时,需要在类中实现compareTo方法
@Override public int compareTo(Person o) { int n1 = this.getName().compareTo(o.getName()); int n2 = this.age-o.age; return n1==0?n2:n1;
浙公网安备 33010602011771号