Map存储数据的特点是什么?指明key、value、entry存储数据的特点
双列数据,无序,不可重复,存储key-value对 数据
key:无序的、不可重复的,用Set存放
value:无序的、可重复的,用Collection存放
entry:无序的、不可重复的,用Set存放
描述HashMap的底层实现原理(jdk8)
HashMap map = new HashMap();
在底层建立一个Node[]为0长度的数组;
map.put(key,value);
首次添加在底层建立一个长度为16的Node[]数组
通过map所在类的hashCode()方法来计算其添加key的哈希值,再通过某种算法计算出key的Node[]位置
再判断其位置是否有别的元素已经在了,如果没有添加成功
如果有进行判断其与key的哈希值是否相等
不相等,添加成功;
相等,在调用key所在类的equals()方法来判断与元素是否相等;
不相等,添加成功;
相等,再判断其位置是否还有元素;
如果有,再进行判断equals()方法,值是否相等,不相等添加成功;
值相同,再是否还有元素,直到链表位置没有元素,否则添加失败
Map中常用的实现类有哪些,各自有什么特点?
HashMap: Map类的主要实现对象,可以存放null值;线程不安全,效率高
LinkedHashMap: 是HashMap的子类;遍历元素可以按照添加顺序遍历,具有两个指针,一个指向输入的上个元素,一个指向输入的下个元素
Hashtable: Map类中的古老实现对象,不可以存放null值;线程安全,效率低
TreeMap: 保证添加的元素为一个类型;保证按照添加的key-value对 进行排序,实现排序遍历。此时是考虑对key的自然排序或定制排序。
properties: 是Hashtable的子类;一般用于处理配置文件;key和value都是String类型
如何遍历Map中的key-value对,代码实现
public void test(){
HashMap map =new HashMap();
map.put("AA",123);
map.put("BB",456);
map.put("CC",789);
Iterator iterator = map.iteraotr();
while(iterator.hasNext()){
Object obj =iterator.next();
Object value = obj.get(obj);
System.out.println("key+"+obj+"value+"+value);
}
}
Collection和Collections的区别
Collection是储存单列集合的接口,常用的有List和Set接口
Collections是操作Collection接口和Map接口的工具类