zoukankan      html  css  js  c++  java
  • 集合(双列)

    Map

      HashMap

        LinkedHashMap

      Hashtable

      TreeMap

    Map用于存储键值对,根据键得到值,因此不允许键重复,值可以重复。
    l  (1)HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为null,不允许多条记录的值为null。HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要同步,可以用Collections.synchronizedMap(HashMap map)方法使HashMap具有同步的能力。
    l  (2)Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,然而,这也导致了Hashtable在写入时会比较慢。
    l  (3)LinkedHashMap保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的。在遍历的时候会比HashMap慢。有HashMap的全部特性。
    l  (4)TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iteraor遍历TreeMap时,得到的记录是排过序的。TreeMap的键和值都不能为空。

    TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。

    Map的四种遍历方式:

     1 import java.util.HashMap;
     2 import java.util.Iterator;
     3 import java.util.Map;
     4 
     5 public class TestMap {
     6     public static void main(String[] args) {
     7         Map<Integer, String> map = new HashMap<Integer, String>();
     8         map.put(1, "a");
     9         map.put(2, "b");
    10         map.put(3, "ab");
    11         map.put(4, "ab");
    12         map.put(4, "ab");// 和上面相同 , 会自己筛选
    13         System.out.println(map.size());
    14         // 第一种:
    15         /*
    16          * Set<Integer> set = map.keySet(); //得到所有key的集合
    17          * 
    18          * for (Integer in : set) { String str = map.get(in);
    19          * System.out.println(in + "     " + str); }
    20          */
    21         System.out.println("第一种:通过Map.keySet遍历key和value:");
    22         for (Integer in : map.keySet()) {
    23             //map.keySet()返回的是所有key的值
    24             String str = map.get(in);//得到每个key多对用value的值
    25             System.out.println(in + "     " + str);
    26         }
    27         // 第二种:
    28         System.out.println("第二种:通过Map.entrySet使用iterator遍历key和value:");
    29         Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
    30         while (it.hasNext()) {
    31              Map.Entry<Integer, String> entry = it.next();
    32                System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
    33         }
    34         // 第三种:推荐,尤其是容量大时
    35         System.out.println("第三种:通过Map.entrySet遍历key和value");
    36         for (Map.Entry<Integer, String> entry : map.entrySet()) {
    37             //Map.entry<Integer,String> 映射项(键-值对)  有几个方法:用上面的名字entry
    38             //entry.getKey() ;entry.getValue(); entry.setValue();
    39             //map.entrySet()  返回此映射中包含的映射关系的 Set视图。
    40             System.out.println("key= " + entry.getKey() + " and value= "
    41                     + entry.getValue());
    42         }
    43         // 第四种:
    44         System.out.println("第四种:通过Map.values()遍历所有的value,但不能遍历key");
    45         for (String v : map.values()) {
    46             System.out.println("value= " + v);
    47         }
    48     }
    49 }
  • 相关阅读:
    未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”
    未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包
    重装VS2010时出现未能正确加载 "radlangsvc.package,radlangsvc.vs...
    page.Response.WriteFile(newpath);
    Response.ContentType 详细列表 <转>
    创建存储过程,使用游标更新表信息
    淘宝顶端的通知样式 .
    ssm整合各配置文件
    XSS-Labs(Level1-10)
    局域网技术
  • 原文地址:https://www.cnblogs.com/laodang/p/9855787.html
Copyright © 2011-2022 走看看