一、 整体概述
目录
二、HashSet、LinkedHashSet、TreeSet 的底层原理
1. 特点:无序:数据的添加顺序和获取出的顺序不一样; 不重复; 无索引
- HashSet: 无序、不重复、无索引
- LinkedHashSet: 有序、 不重复、无索引
- TreeSet: 排序、不重复、无索引
public static void main(String[] args) {
//Set<Integer> set = new HashSet<>();//多态写法 无序、不重复、无索引
//Set<Integer> set = new LinkedHashSet<>();//多态写法 有序、 不重复、无索引
Set<Integer> set = new TreeSet<>(); //多态写法 排序、不重复、无索引
set.add(999);
set.add(666);
set.add(666);
set.add(888);
set.add(999);
set.add(888);
System.out.println(set); //[666, 888, 999]
}
tip: Set 要用到的常用方法,基本上就是Coollection 提供的
二、HashSet、LinkedHashSet、TreeSet 的底层原理
1. 前置知识
哈希值:
- 就是一个int类型的数据,java里面每一个对象都有一个哈希值
- java中所有对象都可以调用Object类提供的hashCode方法,返回对象自己的哈希值
- 语法: public int hashCode()
- 同一个对象多次调用hashCode方法返回的哈希值都一样
- 不同的对象,哈希值可能相同或不同 int( -21亿多 ~ 21亿多 ) 45亿个对象
public static void main(String[] args) {
Student s1 = new Student("Jam", 20, 175);
Student s2 = new Student("Sam",26,180);
System.out.println(s1.hashCode()); //990368553
System.out.println(s2.hashCode()); //1096979270
String str1 = new String("abc");
String str2 = new String("acD");
System.out.println(str1.hashCode()); //96354
System.out.println(str2.hashCode()); //96354
}
2. HashSet 集合的底层原理
- 基于哈希表实现
- 哈希表是一种增删改查数据,性能比较好的数据结构
- 哈希表:JDK8之前,哈希表 &#