Set
- 不重复
- 无序
Map
- 映射
- Key – value,称为Entry
- Map的size就是entry的数量
- Map接口是单独的接口,没有继承任何接口,与之前的jdk版本不同
- put放入元素
- get(key) 提取元素
- 迭代 entrySet keySet
- HashMap.hash()方法的意义、
将新的hash值跟更多的特征值相关 - HashSet的内部是通过HashMap实现的
Node<k,v>
Class Node<k,v>{
int hash; //新hash
final K key; //key不能修改
V value //value
Node<k,v> next;
}
- 元素是否重复的判断标准
p.hash==hash&&((k=p.key)=key | | (key!=null && key.equals(k)))
Map集合常用类:
Hashtable:线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。
HashMap:线程不安全,速度快,允许存放null。
TreeMap:对键进行排序。
Hash
哈希算法可以将任意长度的二进制值引用为较短的且固定长度的二进制值,把这个小的二进制值称为哈希值。
Set接口中常用的类:
HashSet:线程不安全,存取速度快。
TreeSet:线程不安全,可以对set集合中的元素进行排序。
Set集合元素唯一性的原因:
HashSet:通过hashCode()方法、==和equals();方法来保证元素唯一性。
TreeSet:通过compareTo或者compare方法中的来保证元素的唯一性,元素以二叉树形式存放。