zoukankan      html  css  js  c++  java
  • 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值

  • 相关阅读:
    ShellExecuteEx 函数说明
    npm
    Byte和char
    如何高效阅读一个项目
    C++中慎用malloc
    #ifdef
    string
    C++与C混合编译
    git@github.com: Permission denied (publickey).
    connect to host github.com port 22: Connection refused
  • 原文地址:https://www.cnblogs.com/chichung/p/10254550.html
Copyright © 2011-2022 走看看