Map实现类之二:LinkedHashMap 介绍和Map 常用方法介绍

2020-11-19 0 By admin

一、LinkedHashMap的底层实现原理

LinkedHashMap是HashMap的子类。在HashMap存储结构的基础上,使用了一对双向链表来记录添加元素的顺序。
与LinkedHashSet类似,LinkedHashMap可以维护Map 的迭代顺序:迭代顺序与Key-Value 对的插入顺序一致。

1.1、HashMap中的内部类:Node

/ * Basic hash bin node, used for most entries.  (See below for
 * TreeNode subclass, and in LinkedHashMap for its Entry subclass.)
 */
static class Node<K,V> implements Map.Entry<K,V> {
    final int hash;
    final K key;
    V value;
    Node<K,V> next;
}

1.2、LinkedHashMap中的内部类:Entry

/**
 * HashMap.Node subclass for normal LinkedHashMap entries.
 */
static class Entry<K,V> extends HashMap.Node<K,V> {
    Entry<K,V> before, after;//能够记录添加的元素的先后顺序
    Entry(int hash, K key, V value, Node<K,V> next) {
        super(hash, key, value, next);
    }
}

二、Map中定义的方法

添加、删除、修改操作:

  1. Object put(Object key,Object value):将指定key-value添加到(或修改)当前map对象中
  2. void putAll(Map m):将m中的所有key-value对存放到当前map中
  3. Object remove(Object key):移除指定key的key-value对,并返回value
  4. void clear():清空当前map中的所有数据

元素查询的操作:

  1. Object get(Object key):获取指定key对应的value
  2. boolean containsKey(Object key):是否包含指定的key
  3. boolean containsValue(Object value):是否包含指定的value
  4. int size():返回map中key-value对的个数
  5. boolean isEmpty():判断当前map是否为空
  6. boolean equals(Object obj):判断当前map和参数对象obj是否相等

元素操作的方法:

  1. Set keySet():返回所有key构成的Set集合
  2. Collection values():返回所有value构成的Collection集合
  3. Set entrySet():返回所有key-value对构成的Set集合

2.1、代码示例

 Map map = new HashMap();
 //添加
 map.put("AA",123);
 map.put(45,1234);
 map.put("BB",56);
 //修改
 map.put("AA",87);
 System.out.println(map);
 boolean isExist = map.containsKey("BB");
 //remove(Object key)
 Object value = map.remove("CC");
 System.out.println(value);
 System.out.println(map);
 //clear()
 map.clear();//与map = null操作不同
 System.out.println(map.size());
 System.out.println(map);
 //遍历所有的key集:keySet()
 Set set = map.keySet();
 Iterator iterator = set.iterator();
 while(iterator.hasNext()){
     System.out.println(iterator.next());
 }
 System.out.println("*****************");
 
 //遍历所有的values集:values()
 Collection values = map.values();
 for(Object obj : values){
     System.out.println(obj);
 }
 System.out.println("***************");
 //遍历所有的key-values
 //方式一:
 Set entrySet = map.entrySet();
 Iterator iterator1 = entrySet.iterator();
 while (iterator1.hasNext()){
     Object obj = iterator1.next();
     //entrySet集合中的元素都是entry
     Map.Entry entry = (Map.Entry) obj;
     System.out.println(entry.getKey() + "---->" + entry.getValue());
 
 }
 System.out.println("/");
 
 //方式二:
 Set keySet = map.keySet();
 Iterator iterator2 = keySet.iterator();
 while(iterator2.hasNext()){
     Object key = iterator2.next();
     Object value = map.get(key);
     System.out.println(key + "=====" + value);
 }