set接口实现共同的特征不能存储重复元素HashSet哈希散列本质就是一个数组算出哈希值数据最多存在哈希表对应的位置存储的元素是无序TreeSet树存储的元素是有序排序的第一个存入是根HashSet可以实现值不能重复key不重复原理底层使用两方法hashCode() / equals()先调用hashCode()根据内容算出一个哈希值int类型先用整数哈希值比较哈希值相同说明内容也相同。哈希值也有风险内容不同算出的哈希值相同。所以在哈希值相同的情况下再调用equals()判断内容结论向HashSet中添加的数据类型中必须提供hashCode()和equals()向HashSet中存储我们自己定义的Student类型如果没有重写hashCode()默认会调用Object类中的hashCode()Object类中public native int hashCode();是一个native修饰方法本地方法由操作系统提供的读取的是对象的内存地址所以只要是new出来的对象对象地址都不同。现在的需求是对象中内容相同就判定为重复内容。需要对Object类中的equals()和hashCode()进行重写根据内容计算哈希值判断内容是否相等TreeSet树状结构存储的元素是有序(排序)第一个存入是根TreeSet底层使用的是红黑树可以自平衡避免成为链表Map接口实现Map接口的实现类都是双列集合可以存储一组键值对。键不能重复值可以重复实现类HashMap可以存储一个为null的键值都可以为null。向HashMap添加元素首先用key计算出一个哈希值当哈希值与数组长度取模运算结果就是该元素在数组中的位置。如果此位置上还没有元素直接将该元素存储到一个节点上放到数组中如果继续添加元素出现同位置先比较键是否相同如果不同把后一个元素放到前一个元素的后面形成链表。当链表长度满足一定条件时转为红黑树。底层用到的数据结构哈希表数组链表默认长度16哈希表扩容两倍哈希表转为红黑树条件当链表长度等于8时哈希表长度小于64会先扩容哈希表。当链表长度为8哈希表长度大于64时才会转成红黑树。TreeMap 底层实现红黑树可以根据键进行排序key值的类型必须实现Comparable接口Hashtable 也是哈希结构方法加了锁多线程环境下是安全的但不能存储null键和值且是无序的。throw new NullPointerException() 抛出异常终止方式1先拿到所有的key进行循环每次拿到一个key然后再上map中取值效率低不推荐方式2Collection 接口单列集合最大接口Collections 类一个集合操作的工具类包含许多静态方法int ... c 可变长度的参数本质上是个数组一个参数列表中只能有一个可变长度的参数且必须放在末尾