1.2 Set

1. Set接口和方法

1dc52c8ded9e4642474b29267e1a3d42
db7d38dc130911ffb9629467d6fca276

举例

image

代码示例

package com.baidu.www;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Test {
    public static void main(String[] args) {
        Set<Student> set = new HashSet<>();

        Student s1 = new Student(12);
        Student s2 = new Student(23);
        Student s3 = new Student(22);
        Student s4 = new Student(56);
        Student s5 = new Student(12);

        set.add(s1);
        set.add(s2);
        set.add(s3);
        set.add(null);
        set.add(s4);
        set.add(s5);

        /**
         * Set集合保证元素的唯一性依赖两个方法:equals() 和 hashCode()
         * 没有在 Student类中重写这两个方法,默认调用的是 Object 类中的这两个方法
         * 而 Object类中的 equals方法默认比较的是地址值是否相同
         *
         * 解决方案:
         *      在 Student类中重写 equals()方法 和 hashCode()方法
         */
        System.out.println(set);

        System.out.println("======通过迭代器遍历======");
        // 通过迭代器遍历set集合
        Iterator<Student> it = set.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }

        System.out.println("======通过增强for遍历======");
        // 通过增强for遍历set集合
        for (Student student : set) {
            System.out.println(student);
        }
    }
}

2. HashSet

bc3a8b53e373a9c6c1622450270fe5f8

底层机制

image

链表个数达到8,则扩容到32,然后扩容到64,然后10个链表元素进行红黑树的转化。

2d185c5308afac038d7a53be1de6eec6

image

示例代码

package com.baidu.www;

import java.util.HashSet;

public class HashSet_ {
    public static void main(String[] args) {
        HashSet hashSet = new HashSet();

        hashSet.add("java");
        hashSet.add("php");
        hashSet.add("java");

        for (int i = 0; i < 100; i++) {
            hashSet.add(i);
        }

        System.out.println(hashSet);
    }
}

3. LinkedHashSet

17bc104cad058081c34da77ea7ac18ff
4818bd47313445cf9e8942a4b1389e08

posted @ 2025-08-21 19:42  无敌美少女战士  阅读(5)  评论(0)    收藏  举报