集合(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;

 

posted @ 2022-03-27 18:18  长空扯淡  阅读(42)  评论(0)    收藏  举报