一 HashSet:
1.元素唯一,无序,不保证迭代顺序永久不变
2. 元素的唯一性依靠重写的HashCode和equals方法
3.String类中已经自动重写了HashCod和equals方法,不用重写
3. 执行流程:
首先判断哈希值是否相同,如果不同,就直接添加到集合。
如果相同,继续执行equals(),看其返回值,
如果是false,就直接添加到集合。
如果是true,说明元素重复不添加。
二 TreeSet:
1.对于数字和字母的排序,是自动的
2.自然排序:类实现Compareable()接口,重写CompareTo()方法,创建TreeSet集合时不用传参
3.比较器排序:不需要实现Comparator接口,只要在新建TreeSet时时使用匿名内部类重写CompareTo方法即可
4.HashSet与TreeSet的相同点与不同点
相同点:
单列集合,元素不可重复
不同点:
1. 底层存储的数据结构不同
HashSet底层用的是HashMap哈希表结构存储,而TreeSet底层用的是TreeMap树结构存储
2.存储时保证数据唯一性依据不同
HashSet是通过复写hashCode()方法和equals()方法来保证的,而TreeSet通过Compareable接口的 compareTo()方法来保证的
3.有序性不一样
HashSet无序,TreeSet有序
三 Map:
概念: map<key,value>,将键映射到值的对象,一个映射不能包含重复的键,一个键映射一个值
1.添加功能: V put(K key,V value):集合添加键值对
2.长度功能: int size():键值对对数。
3.通过键值遍历
4.通过获取键值对的对象遍历,getKey, getValue
.HashMap与TreeMap的相同点与不同点
相同点:主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。
不同点:
1.HashMap里面存入的键值对在取出的时候是随机的,也是我们最常用的一个Map.根据键可以直接获取它的值,
具有很快的访问速度。在Map 中插入、删除和定位元素,HashMap 是最好的选择。
2.TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。