java map接口 性能 map接口实现类有哪些_java


Map接口及常用的实现类

一、接口 Map<K,V>

  • 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
  • Map<key,value> 对象名=new 子类<key,value>();
  • 特点:键不可以重复、值不可以重复

Map接口方法

①V put(K key,V value)

将指定的值与此映射中的指定键关联(可选操作)。

参数:key - 与指定值关联的键value - 与指定键关联的值


import java.util.HashMap;
import java.util.Map;
public class ClearDome {
    public static void main(String[] args) {
        Map<String,String> maps=new HashMap<String,String>();
        maps.put("java", "张三");
        maps.put("php", "李四");
        maps.put("javascrip", "王五");
        System.out.println(maps);//结果:{java=张三, javascrip=王五, php=李四}
    }
}


②void clear()

从此映射中移除所有映射关系(可选操作)。此调用返回后,该映射将为空。


import java.util.HashMap;
import java.util.Map;
public class ClearDome {
    public static void main(String[] args) {
        Map<String,String> maps=new HashMap<String,String>();
        maps.put("java", "张三");
        maps.put("php", "李四");
        maps.put("javascrip", "王五");
        System.out.println(maps);// 结果:{java=张三, javascrip=王五, php=李四}
        /**********************************************************/
        maps.clear();
        System.out.println(maps);//结果:{}
        /**********************************************************/
    }
}


③boolean containsKey(Object key)

如果此映射包含指定键的映射关系,则返回 true。更确切地讲,当且仅当此映射包含针对满足 (key==null ? k==null : key.equals(k)) 的键 k 的映射关系时,返回 true。(最多只能有一个这样的映射关系)。


import java.util.HashMap;
import java.util.Map;
public class ContainsKeyDome {
    public static void main(String[] args) {
        Map<String,String> maps=new HashMap<String,String>();
        maps.put("java", "张三");
        maps.put("php", "李四");
        maps.put("javascrip", "王五");
        System.out.println(maps);// 结果:{java=张三, javascrip=王五, php=李四}
        /**********************************************************/
        boolean bool=maps.containsKey("java");
        System.out.println(bool);   //结果:true
        /**********************************************************/
    }
}


④boolean containsValue(Object value)

如果此映射将一个或多个键映射到指定值,则返回 true。更确切地讲,当且仅当此映射至少包含一个对满足 (value==null ? v==null : value.equals(v)) 的值 v 的映射关系时,返回 true。对于大多数 Map 接口的实现而言,此操作需要的时间可能与映射大小呈线性关系。


import java.util.HashMap;
import java.util.Map;
public class ContainValueDome {
    public static void main(String[] args) {
        Map<String,String> maps=new HashMap<String,String>();
        maps.put("java", "张三");
        maps.put("php", "李四");
        maps.put("javascrip", "王五");
        System.out.println(maps);// 结果:{java=张三, javascrip=王五, php=李四}
        /**********************************************************/
        boolean bool=maps.containsValue("王五");
        System.out.println(bool);   //结果:true
        /**********************************************************/
    }
}


⑤boolean equals(Object o)

比较指定的对象与此映射是否相等。


import java.util.HashMap;
import java.util.Map;
public class EqualDome {
    public static void main(String[] args) {
        Map<String,String> mapA=new HashMap<String,String>();
        Map<String,String> mapB=new HashMap<String,String>();
        mapA.put("1001", "a");
        mapB.put("1002"," value");
        /******************************************************/
        boolean bool=mapA.equals(mapB);
        System.out.println(bool);       //结果:false
        /******************************************************/
    }
}


⑥V get(Object key)

返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。


import java.util.HashMap;
import java.util.Map;
public class GetDome {
    public static void main(String[] args) {
        Map<String,String> maps=new HashMap<String,String>();
        maps.put("java", "张三");
        maps.put("php", "李四");
        maps.put("javascrip", "王五");
        /******************************************************/
        String str=maps.get("php");
        System.out.println(str);    //结果:李四
        /******************************************************/
    }
}


⑦void putAll(Map<? extends K,? extends V> m)

从指定映射中将所有映射关系复制到此映射中(可选操作)。


import java.util.HashMap;
import java.util.Map;
public class putAllDome {
    public static void main(String[] args) {
        Map<String,String> mapA=new HashMap<String,String>();
        Map<String,String> mapB=new HashMap<String,String>();
        mapA.put("1001", "a");
        mapA.put("1003", "jake");
        mapB.put("1002"," value");
        System.out.println(mapA);   //结果:{1003=jake, 1001=a}
        System.out.println(mapB);//结果:{1002= value}
        /********************************************************/
        mapB.putAll(mapA);
        System.out.println(mapA);//结果:{1003=jake, 1001=a}
        System.out.println(mapB);//结果:{1003=jake, 1002= value, 1001=a}
        /********************************************************/
    }
}


⑧V remove(Object key)

如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。


import java.util.HashMap;
import java.util.Map;
public class remove {
    public static void main(String[] args) {
        Map<String,String> maps=new HashMap<String,String>();
        maps.put("java", "张三");
        maps.put("php", "李四");
        maps.put("javascrip", "王五");
        /******************************************************/
         maps.remove("php");
        System.out.println(maps);   //结果:{java=张三, javascrip=王五}
        /******************************************************/
    }
}


⑨Collection<V> values()

返回此映射中包含的值的 Collection 视图。


import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
public class ValueDome {
    public static void main(String[] args) {
        Map<String,String> maps=new HashMap<String,String>();
        maps.put("java", "张三");
        maps.put("php", "李四");
        maps.put("javascrip", "王五");
        /*****************************************************/
        Collection<String> coll=maps.values();
        System.out.println(coll);   //结果:[张三, 王五, 李四]
        /****************************************************/
    }
}


⑩Set<K> keySet()

得到Map集合中的所有键


import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class KeySetDome {
    public static void main(String[] args) {
        Map<String,String> maps=new HashMap<String,String>();
        maps.put("java", "张三");
        maps.put("php", "李四");
        maps.put("javascrip", "王五");
        /****************************************************/
        Set<String> sets=maps.keySet();
        System.out.println(sets);   //结果:[java, javascrip, php]
        /****************************************************/
    }
}


⑪Set<Map.Entry<K,V>> entrySet()

返回此映射中包含的映射关系的 Set 视图。


import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class entrySetDome {
    public static void main(String[] args) {
        Map<String,String> maps=new HashMap<String,String>();
        maps.put("java", "张三");
        maps.put("php", "李四");
        maps.put("javascrip", "王五");
        /****************************************************/
        Set<Map.Entry<String, String>> sets=maps.entrySet();
        System.out.println(sets);   //结果:[java, javascrip, php]
        /****************************************************/
    }
}


二、Map实现类---------HashMap集合

  • 基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
  • 特点:线程不安全集合、顺序不一定

三、Map实现类---------LinkedHashMap集合

  • Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。注意,如果在映射中重新插入 键,则插入顺序不受影响。
  • 特点:线程不安全、具有迭代顺序

四、Hashtable集合

  • 此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。
  • Hashtable线程安全,运算速度慢。HashMap线程不安全,运算速度快
  • 从JDK1.2开始Hashtab就被HashMap代替
  • HashMap允许存储null值null键,而Hashtable不允许
  • Hashtable的子类Provider哈活跃在开发中