Java集合类---Set

3.Set

  • 特点总结

         不包含重复元素,最多只能包含一个null元素
         特点:无序,不重复
         遍历方式不能使用for循环(没有get()方法),只能用迭代器
    

3.1HashSet

HashSet实现 Set接口,由哈希表(底层: HashMap 实现)支持。
它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。HashSet保证元素唯一。
底层数据结构是哈希表,哈希表依赖于哈希值存储。添加元素时保证元素唯一,此类允许使用null元素。

  • 存储特点:

         相对无序存储,不可以存储相同元素(排重),通过哈希表实现的集合
    
  • 常用方法和其他的差不多,主要经常用到是int hashCode()和boolean equals(Object obj)

3.1.1代码Code:

package mygather;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class HashMapTest02 {
    
    
    private long cardNo;

    public static void main(String[] args) {
    
    
        IdCard idCard01 = new IdCard();
        idCard01.cardNo = 111L;
        Person person01 = new Person();
        person01.name = "张三";

        IdCard idCard02 = new IdCard();
        idCard02.cardNo = 112L;
        Person person02 = new Person();
        person02.name = "李四";

        IdCard idCard03 = new IdCard();
        idCard03.cardNo = 113L;
        Person person03 = new Person();
        person03.name = "王五";

        Map<IdCard, Person> map = new HashMap<>();
        map.put(idCard01, person01);
        map.put(idCard02, person02);
        map.put(idCard03, person03);
        System.out.println(map.size());
        System.out.println(map.hashCode());

        //迭代器遍历
        for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext(); ) {
    
    
            Map.Entry entry = (Map.Entry) iterator.next();
            IdCard idCard = (IdCard) entry.getKey();
            Person person = (Person) entry.getValue();
            System.out.println(idCard.cardNo + ", " + person.name);
        }
    }

    //重写equals()和hashCode()方法
    public boolean equals(Object obj) {
    
    
        if (obj == this) {
    
    
            return true;
        }
        if (obj instanceof IdCard) {
    
    
            IdCard idCard = (IdCard) obj;
            if (this.cardNo == idCard.cardNo) {
    
    
                return true;
            }
        }
        return false;
    }

    public int hashCode() {
    
    
        return new Long(cardNo).hashCode();
    }
}

class IdCard {
    
    
    long cardNo;
}

class Person {
    
    
    int age;
    String name;
}


3.1.2输出结果(截图):

在这里插入图片描述

3.2TreeSet

TreeSet基于 TreeMap实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,(排序方式)具体取决于使用的构造方法。

使用元素的自然顺序对元素进行排序(自然排序),根据创建 set 时提供的 Comparator 接口或Comparator接口进行排序(比较器排序)

底层数据结构是红黑树(自平衡二叉树)

  • 存储特点:

        无序存储,通过二叉树实现的集合,可以给元素进行重新排序(TreeSet保证元素的排序和唯一性的)
    

3.2.1代码Code:

package mygather;

import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class MyTreeSet {
    
    
    public static void main(String[] args) {
    
    
        Set<String> treeSet = new TreeSet<String>();
        treeSet.add("1");
        treeSet.add("2");
        treeSet.add("3");
        treeSet.add("4");
        treeSet.add("5");
        //set接口是不重复的
        treeSet.add("5");
        System.out.println(treeSet);

        //添加
        //因为set接口不重复,所以无法添加自身
        treeSet.addAll(treeSet);
        System.out.println(treeSet);
        Set<String> set = new TreeSet<String>();
        set.add("8");
        //但可以添加别的集合
        treeSet.addAll(set);
        System.out.println(treeSet);

        //遍历
        System.out.println("-----foreach循环遍历-----");
        for (String string : treeSet) {
    
    
            System.out.println(treeSet);
        }
        System.out.println("-----迭代器遍历-----");
        Iterator<String> iterator = treeSet.iterator();
        while (iterator.hasNext()) {
    
    
            System.out.print(iterator.next() + " ");
        }
        System.out.println();

    }
}

3.2.2输出结果(截图)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_47949604/article/details/116565553