分享

Java 集合

 OneDayDayUp 2016-07-20

1. Map基础

 

    Map接口提供3种集合的视图:
    map的key不能够重复,value可以
    (1)key-value映射集合 — entrySet() 返回包含映射的Set视图。Set中的每个元素都是一个Map.Entry对象,可以使用 getKey()和getValue()方法(还有一个setValue() 方法)访问后者的键元素和值元素
    (2)key集合 — keySet() 包含键的 Set 视图。删除 Set 中的元素还将删除 Map 中相应的映射(键和值)
    (3)value集合,values() 是值的 Collection 视图。删除 Collection 中的元素还将删除 Map 中相应的映射(键和值)
    我们还必须获得一个Iterator对象,进而取得相应的key-value映射、key和value。

Java代码  收藏代码
  1. Iterator keyValuePairs = aMap.entrySet().iterator();  
  2. Iterator keys = aMap.keySet().iterator();//keys.remove();删除当前键值对  
  3. Iterator values = aMap.values().iterator();//values.remove();删除当前键值对  

     Map增删方法
    clear() 从 Map 中删除所有映射 
    remove(Object key) 从 Map 中删除键和关联的值 
    put(Object key, Object value) 将指定值与指定键相关联


    Map访问方法
    get(Object key) 返回与指定键关联的值 
    containsKey(Object key) 如果 Map 包含指定键的映射,则返回true
    containsValue(Object value) 如果此 Map 将一个或多个键映射到指定值,则返回 true
    isEmpty() 如果 Map 不包含键-值映射,则返回 true 
    size() 返回 Map 中的键-值映射的数目

 

2. HashMap和HashTable的区别

 

    Hashtable继承自Dictionary类, size()表示包含了多少元素;isEmpty()判断是否包含了元素;put(Object key, Object value)添加一个值;get(Object key)获得与某个键对应的值;而remove(Object Key)从列表中删除“键-值”对。还可以使用枚举技术:keys()产生对键的一个枚举(Enumeration);而elements()产生对所有值的一个枚举。这便是一个Dictionary(字典)的全部。


    (1) 继承和实现区别
    Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。
    (2) 线程安全不同
    HashTable的方法是同步的,HashMap是未同步,所以在多线程场合要手动同步HashMap。HashMap效率高
    (3) 对null的处理不同
    HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。
    HashTable 不允许null值,编译期不会检查,运行期会出现空指针异常。HashMap允许 null值是指可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。
    (4) 方法不同   

    HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。
    (5) HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

 

    HashTable

Java代码  收藏代码
  1. public static void hashTableTest(){  
  2.        Hashtable hash = new Hashtable();  
  3.        hash.put("abc", "1");  
  4.        hash.put("ddd", "1");  
  5.        hash.put("asdf", "2");  
  6.        // hash.put("asdfsad", null); NullPointerException  
  7.        System.out.println("迭代方法1:entrySet");  
  8.        Set entrySet = hash.entrySet();  
  9.        for(Iterator i=entrySet.iterator();i.hasNext();){  
  10.            Entry entry = (Entry)i.next();  
  11.            System.out.println("key:"+entry.getKey()+",value:"+entry.getValue());  
  12.        }  
  13.        Set set = hash.keySet();  
  14.        System.out.println("迭代方法2:keySet");  
  15.        for(Iterator i=set.iterator();i.hasNext();){  
  16.            String key = (String)i.next();  
  17.            System.out.println("key:"+key+",value:"+hash.get(key));  
  18.        }  
  19.        System.out.println("迭代方法3: values");  
  20.        Collection values = hash.values();  
  21.        for(Iterator i=values.iterator();i.hasNext();){  
  22.            System.out.println("value:"+i.next());  
  23.        }  
  24.        System.out.println("迭代方法4: keys");  
  25.        Enumeration enumkey = hash.keys();  
  26.        while (enumkey.hasMoreElements()) {  
  27.            String str = (String) enumkey.nextElement();  
  28.            System.out.println(str + " --- " + hash.get(str));  
  29.            if ("1".equals(hash.get(str)))  
  30.                hash.remove(str);  
  31.        }  
  32.        System.out.println("asdf:" + hash.get("asdf"));  
  33.        enumkey = hash.elements();  
  34.        while (enumkey.hasMoreElements()) {  
  35.            String str = (String) enumkey.nextElement();  
  36.            System.out.println(str );  
  37.        }    
  38.    }    

 

2. Map排序

 

    Map排序,可以按key排序,也可以按value排序,示例代码如下:

Java代码  收藏代码
  1. public static void main(String[] args) {  
  2.         Map<String, Integer> maps = new HashMap<String, Integer>();  
  3.         maps.put("boy", 8);  
  4.         maps.put("cat", 7);  
  5.         maps.put("dog", 1);  
  6.         maps.put("apple", 5);  
  7.         //排序前的输出  
  8.         Iterator i = maps.entrySet().iterator();  
  9.         while (i.hasNext()) {  
  10.             Map.Entry<String, Integer> entry1 = (Map.Entry<String, Integer>) i.next();  
  11.             System.out.println(entry1.getKey() + "-------->" + entry1.getValue());  
  12.         }  
  13.         System.out.println("排序后的输出:");  
  14.         List<Map.Entry<String, Integer>> info = new ArrayList<Map.Entry<String, Integer>>(maps  
  15.                 .entrySet());  
  16.         Collections.sort(info, new Comparator<Map.Entry<String, Integer>>() {  
  17.   
  18.             public int compare(Map.Entry<String, Integer> obj1, Map.Entry<String, Integer> obj2) {  
  19.                 return obj1.getKey().compareTo(obj2.getKey());//按key排序  
  20.                 //return obj2.getValue() - obj1.getValue(); //按value排序  
  21.             }  
  22.         });  
  23.   
  24.         for (int j = 0; j < info.size(); j++) {  
  25.             System.out.println(info.get(j).getKey() + "------->" + info.get(j).getValue());  
  26.         }  
  27.     }  
 

3. Map遍历

 

Java代码  收藏代码
  1. public static void iterationTest() {  
  2.         Map<String, Integer> tempMap = new HashMap<String, Integer>();  
  3.         tempMap.put("a", 1);  
  4.         tempMap.put("b", 2);  
  5.         tempMap.put("c", 3);  
  6.         // JDK1.4中  
  7.         // 遍历方法一 hashmap entrySet() 遍历  
  8.         System.out.println("方法一");  
  9.         Iterator it = tempMap.entrySet().iterator();  
  10.         while (it.hasNext()) {  
  11.             Map.Entry entry = (Map.Entry) it.next();  
  12.             Object key = entry.getKey();  
  13.             Object value = entry.getValue();  
  14.             System.out.println("key=" + key + " value=" + value);  
  15.         }  
  16.         System.out.println("");  
  17.         // JDK1.5中,应用新特性For-Each循环  
  18.         // 遍历方法二  
  19.         System.out.println("方法二");  
  20.         for (Map.Entry<String, Integer> entry : tempMap.entrySet()) {  
  21.             String key = entry.getKey().toString();  
  22.             String value = entry.getValue().toString();  
  23.             System.out.println("key=" + key + " value=" + value);  
  24.         }  
  25.         System.out.println("");  
  26.   
  27.         // 遍历方法三 hashmap keySet() 遍历  
  28.         System.out.println("方法三");  
  29.         for (Iterator i = tempMap.keySet().iterator(); i.hasNext();) {  
  30.             Object obj = i.next();  
  31.             System.out.println(obj);// 循环输出key  
  32.             System.out.println("key=" + obj + " value=" + tempMap.get(obj));  
  33.         }  
  34.         for (Iterator i = tempMap.values().iterator(); i.hasNext();) {  
  35.             Object obj = i.next();  
  36.             System.out.println(obj);// 循环输出value  
  37.         }  
  38.         System.out.println("");  
  39.   
  40.         // 遍历方法四 treemap keySet()遍历  
  41.         System.out.println("方法四");  
  42.         for (Object o : tempMap.keySet()) {  
  43.             System.out.println("key=" + o + " value=" + tempMap.get(o));  
  44.         }  
  45.         System.out.println("11111");  
  46.   
  47.         // java如何遍历Map <String, ArrayList> map = new HashMap <String,ArrayList>();  
  48.   
  49.         Map<String, ArrayList> map = new HashMap<String, ArrayList>();  
  50.         Set<String> keys = map.keySet();  
  51.         Iterator<String> iterator = keys.iterator();  
  52.         while (iterator.hasNext()) {  
  53.             String key = iterator.next();  
  54.             ArrayList arrayList = map.get(key);  
  55.             for (Object o : arrayList) {  
  56.                 System.out.println(o + "遍历过程");  
  57.             }  
  58.         }  
  59.         System.out.println("2222");  
  60.         Map<String, List> mapList = new HashMap<String, List>();  
  61.         for (Map.Entry entry : mapList.entrySet()) {  
  62.             String key = entry.getKey().toString();  
  63.             List<String> values = (List) entry.getValue();  
  64.             for (String value : values) {  
  65.                 System.out.println(key + " --> " + value);  
  66.             }  
  67.         }  
  68.     }  
 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多