zoukankan      html  css  js  c++  java
  • java---Map接口实现类

      Map是一个双列集合接口,如果实现了Map接口,特点是数据以键值对形式存在,键不可重复,值可以重复。java中主要有HashMap、TreeMap、Hashtable。本文主要介绍Map的接口方法:

    1 HashMap、TreeMap、Hashtable

    HashMap的存储原理:

      HashMap 底层也是基于哈希表实现的。往HashMap添加元素的时候,首先会调用键的hashCode方法得到元素 的哈希码值,然后经过运算就可以算出该元素在哈希表中的存储位置。

      情况1: 如果算出的位置目前没有任何元素存储,那么该元素可以直接添加到哈希表中。

      情况2:如果算出 的位置目前已经存在其他的元素,那么还会调用该元素的equals方法与这个位置上的元素进行比较,如果equals方法返回 的是false,那么该元素允许被存储,如果equals方法返回的是true,那么该元素被视为重复元素,不允存储。

    TreeMap存储原理:

      TreeMap也是基于红黑树(二叉树)数据结构实现 的, 特点:会对元素的键进行排序存储。

      TreeMap 要注意的事项:
      1. 往TreeMap添加元素的时候,如果元素的键具备自然顺序,那么就会按照键的自然顺序特性进行排序存储。
      2. 往TreeMap添加元素的时候,如果元素的键不具备自然顺序特性, 那么键所属的类必须要实现Comparable接口,把键的比较规则定义在CompareTo方法上。
      3. 往TreeMap添加元素的时候,如果元素的键不具备自然顺序特性,而且键所属的类也没有实现Comparable接口,那么就必须在创建TreeMap对象的时候传入比较器。

    Hashtable存储原理:

      底层也是hash表实现,实现方式和HashMap一致,但是hashTable是线程安全的,操作效率低。

      http://www.cnblogs.com/K-artorias/p/7090314.html 链接进去,文章讲了hashMap和hashTable的区别。

    2 Map接口的方法:
    添加:
      put(K key, V value)
      putAll(Map<? extends K,? extends V> m)   
    删除
      remove(Object key)
      clear()

    获取:
      get(Object key)
      size()
    判断:
      containsKey(Object key)
      containsValue(Object value)
      isEmpty()

    以下是上述接口方法的代码举例:

     1 public class Demo2 {
     2     
     3     public static void main(String[] args) {
     4         Map<String,String> map = new HashMap<String, String>();
     5         //添加方法
     6         map.put("A", "a");
     7         map.put("B", "b");
     8         map.put("C","c");
     9         
    10         /*
    11         添加
    12         System.out.println("返回值:"+map.put("A","@"));  // 如果之前没有存在该键,那么返回的是null,如果之前就已经存在该键了,那么就返回该键之前对应 的值。
    13         Map<String,String> map2 = new HashMap<String, String>();
    14         map2.put("M", "m");
    15         map2.put("N", "n");
    16         map.putAll(map2); // 把map2的元素添加到map集合中。
    17         
    18         */
    19         
    20         /*
    21         删除
    22         System.out.println("删除的数据是:"+map.remove("A")) ;  //根据键删除一条map中的数据,返回的是该键对应 的值。
    23         map.clear(); //清空集合中的所有数据。
    24         */
    25         
    26         /* 获取
    27         System.out.println("根据指定 的键获取对应的值:"+ map.get("B"));
    28         System.out.println("获取map集合键值对个数:"+map.size());
    29         
    30         
    31         判断
    32         System.out.println("判断map集合是否包含指定的键:"+ map.containsKey("B"));
    33         System.out.println("判断map集合中是否包含指定 的值:"+ map.containsValue("c"));
    34         map.clear();
    35         System.out.println("判断map集合是否为空元素:"+ map.isEmpty());
    36         */
    37         System.out.println("集合的元素:"+ map);
    38         
    39         
    40     }
    41 
    42 }
  • 相关阅读:
    CUDA Error
    yolo v3 loss=nan, Avg loss=nan的一种原因
    C++ LinearRegression代码实现
    C++ 常用数学运算(加减乘除)代码实现 Utils.h, Utils.cpp(有疑问欢迎留言)
    C++ 彩色图像(RGB)三通道直方图计算和绘制,图像逆时针旋转90° 实现代码
    Leetcode 1005. Maximize Sum Of Array After K Negations
    Leetcode 1006. Clumsy Factorial
    Leetcode 617. Merge Two Binary Trees
    Leetcode 477. Total Hamming Distance
    python进制转换
  • 原文地址:https://www.cnblogs.com/K-artorias/p/7373745.html
Copyright © 2011-2022 走看看