java中的Map集合

  • Map接口

Map为一个接口。实现Map接口的类都有一个特点:有键值对,将键映射到值的对象。 Map不能包含重复的键,每个键可以映射到最多一个值。

Map常见的接口方法有:

V  put(K key, V value)   将指定的值与该映射中的指定键相关联(注意,返回值是指被覆盖的value值)

V  remove(Object key)    如果存在(从可选的操作),从该地图中删除一个键的映射

boolean    containsKey(Object key)    如果此映射包含指定键的映射,则返回 true

boolean    containsValue(Object value)    如果此地图将一个或多个键映射到指定的值,则返回 true

Collection<V>    values()    返回此地图中包含的值的Collection视图。

int    size()    返回此地图中键值映射的数量

V    get(Object key)    返回到指定键所映射的值,或 null如果此映射包含该键的映射

Set<K>    keySet()    返回此地图中包含的键的Set视图

Set<Map.Entry<K,V>>    entrySet()     返回此地图中包含的映射的Set视图

 示例1:(遍历Map集合,思路:先获取到键的集合,遍历集合,get方法取出值)

public class Test11 {
    // Map集合没有生成Iterator的方法,所以要用以下方法遍历
    public static void main(String[] args) {
        HashMap<String,Integer> hm = new HashMap<>();
        hm.put("张三",13);
        hm.put("李四",14);
        hm.put("王五",15);
        Set<String> set = hm.keySet();
        /*方式1:
        Iterator<String> it = set.iterator();
        while (it.hasNext()){
            String s = it.next();
            Integer i = hm.get(s);
            System.out.println(s + "=" + i);
        }*/
        
        // 方式2:
        for (String s : set) {
            Integer i = hm.get(s);
            System.out.println(s + "=" + i);
        }
    }
}

 

示例2:(遍历Map集合,思路:把键值对作为一个对象存进集合,遍历集合,取出对象的属性)

public class Test12 {
    public static void main(String[] args) {
        HashMap<String,Integer> hm = new HashMap<>();
        hm.put("张三",13);
        hm.put("李四",14);
        hm.put("王五",15);
        Set<Map.Entry<String,Integer>> set = hm.entrySet();

        /*方式1:
        Iterator<Map.Entry<String,Integer>> it = set.iterator();
        while (it.hasNext()){
            Map.Entry<String,Integer> entry = it.next();
            System.out.println(entry.getKey() + "=" + entry.getValue());*/

        // 方式2:
        for (Map.Entry<String,Integer> entry: set) {
            System.out.println(entry.getKey() + "=" + entry.getValue());
        }
    }
}

 

  • HashMap类

上面的接口方法基本都是HashMap实现的。所以用起来基本一样,不多说。同样的,LinkedHashMap类继承HashMap类,用法基本一样,只是LinkedHashMap底层用了链表实现而已。

 

  • TreeMap类

可以看做能排序的HashMap。原理其实和TreeSet一样......

关于排序可以参考TreeSet类:https://www.cnblogs.com/chichung/p/10252495.html

 

  • Hashtable类

Hashtable与HashSet的关系和ArrayList与Vector的关系几乎一样。

  • 共同点:

底层都是哈希算法,都是双列集合

  • 区别:

1.HashMap是线程不安全的,效率高,JDK1.2版本出现的

   Hashtable是线程安全的,效率低,JDK1.0版本出现的

2.HashMap可以存储null键和null值

   Hashtable不可以存储null键和null值

posted @ 2019-01-11 19:04  苦瓜爆炒牛肉  阅读(175)  评论(0编辑  收藏  举报