Set
1.无序性:不等于随机性.存储的数据在底层数组中并非按照数据索引的顺序进行添加的,而是根据数据的哈希值进行添加的顺序.
2.不可重复性:保证添加的元素按照equals()判断时,不能反回true.即相同的元素智能添加一个
分析:添加元素的过程:一HashSet 为例:
我们向HashSet中添加元素a,首先调用元素a所在类的hashcode()方法,计算元素a的哈希值.
通过此哈希值截止通过某种算法计算出在hashSet底层数组中的存放位置,判断数组此位置上是否已经有元素了:
情况1.如果此位置已经没有其他的元素,则元素a添加成功.
情况2. 如果此位置已经有其他的元素,则需要调用元素a所在类的equlas()方法:
equals()为true,元素a添加失败.
equals()为false,则元素a添加成功.
对于添加成功的情况:元素a与已将存在的指定索引位置上的数据一脸标的范式存储.
jdk7:元素a放大数组中,指向原来的元素.
jdk8:原来的元素在数组中,指向a.
如图所示:
Map:双列数据,存储key-value对的数据.
HashMap:作为Map的主要实现类,线程不安全的,但是效率高.可以存储null的key和value
LinkedHashMap:保证按照添加的key-value对进行排序,实现排序遍历.此时考虑key的自然排序或者定制排序
Hashtable:作为古老的实现类,新城安全的,效率低,不能存储null的key和value