• 4.java基础回顾集合3


    1.Map集合:

    • java.util.Map<k,v>包中
    • 一个双列集合,一个元素包含两个值(key,value)
    • key和value的数据类型可以相同,也可以不相同
    • key不允许重复,value允许重复
    • key和value一一对应

    Map常用子类:

    • HashMap:实现Map<k,v>接口,多线程的
      • JDK1.8之前用数组+单向链表,之后用数组+单向链表/红黑树(数组长度超过8时使用红黑树),提高了查询的速度
      • 无序集合,存储元素和取出元素顺序可能不一致
      • LinkedHashMap:继承HashMap
        • 底层是:哈希表+链表(保证迭代顺序)
        • 有序集合,存储和取出元素顺序一直
    • Hashtable:实现Map<k,v>接口,单线程的
      • JDK1.0就有,较早期的集合
      • 键或值不可以是null
      • 单线程速度慢,已经被HashMap代替了
      • 子类Properties集合:
        • 依然被大量使用
        • 唯一和IO流相结合的集合

    Map常用方法::

    • public V put(K key,V value):向Map中添加指定key和value的元素
    • public V remove(Object key):删除指定key的元素,返回删除的元素值
    • public V get(Object key):根据指定key,获取对应value
    • boolean containsKey(Object key):判定Map中是否包含指定key的元素
    • public Set<K> keySet():获取Map集合中所有key,放入Set集合中
    • pubic Set<Map.Entry<K,V>> entrySet():获得所有Map集合中的键值对元素放入Set集合中

    注:

      Map.Entry<K,V>:在Map接口中有一个内部接口Entry,当Map集合创建时,内部就会创建一个Entry对象,用于记录键和值对象(保存键和值的映射关系)

     1 public class demo03 {
     2 
     3     public static void main(String[] args) {
     4 
     5         Map<String, String> map = new HashMap<>();
     6 
     7         //1.存入键值对
     8         map.put("key1", "value1");
     9         map.put("key2", "value2");
    10         map.put("key3", "value3");
    11         map.put("key4", "value4");
    12 
    13         System.out.println(map);
    14 
    15         //2.删除对应key的键值对
    16         map.remove("key1");
    17         System.out.println(map);
    18 
    19         //3.获得对应key的value值
    20         System.out.println(map.get("key3"));
    21 
    22         //4.判断是否包含对应key的键值对
    23         System.out.println(map.containsKey("key5"));
    24 
    25         //5.遍历Map中的所有key,方法一
    26         Set<String> set = map.keySet();
    27 
    28         Iterator<String> iterator = set.iterator();
    29         while (iterator.hasNext()) {
    30             System.out.println(iterator.next());
    31         }
    32 
    33         //遍历Map中的所有key,方法二
    34 //        for (String s: map.keySet()
    35 //             ) {
    36 //            System.out.println(s);
    37 //        }
    38 
    39         //6.遍历Map中所有的键值对对象,方法一
    40         Set<Map.Entry<String,String>> set2 = map.entrySet();
    41 
    42         Iterator<Map.Entry<String,String>> iterator2 = set2.iterator();
    43         while (iterator2.hasNext()){
    44             System.out.println(iterator2.next());
    45         }
    46 
    47         //遍历Map中所有的键值对对象,方法二
    48 //        for (Map.Entry<String,String> entry: map.entrySet()
    49 //             ) {
    50 //            System.out.println(entry);
    51 //        }
    52 
    53     }
    54 }

    使用HashMap来存储自定义类型:

    • 如果自定义类型作为key,则必须重写hashcode方法和equals方法,用来保证key唯一
    • 如果Java自带类型例如String作为key时,则不用,由于String已经重写过了这两个方法
     1 public class demo04 {
     2 
     3     public static void main(String[] args) {
     4 
     5         HashMap<Person,String> hashMap = new HashMap<>();
     6 
     7         hashMap.put(new Person("wzh",24),"person1");
     8         hashMap.put(new Person("wzh",24),"person2");
     9         hashMap.put(new Person("wxl",23),"person3");
    10         hashMap.put(new Person("wzl",23),"person4");
    11 
    12         for (Map.Entry<Person,String> entry: hashMap.entrySet()
    13              ) {
    14             System.out.println(entry);
    15         }
    16 
    17         /**
    18          * 输出
    19          * Person{name='wzh', age=24}=person2
    20          * Person{name='wzl', age=23}=person4
    21          * Person{name='wxl', age=23}=person3
    22          */
    23     }
    24 }

    使用LinkedHashMap:存取顺序相同

     1 public class demo05 {
     2 
     3     public static void main(String[] args) {
     4 
     5         HashMap<String,String> hashMap = new HashMap<>();
     6 
     7         hashMap.put("key3","value3");
     8         hashMap.put("key2","value2");
     9         hashMap.put("key4","value4");
    10         hashMap.put("key1","value1");
    11 
    12         //存取顺序不相同
    13         System.out.println(hashMap);    //{key1=value1, key2=value2, key3=value3, key4=value4}
    14 
    15         LinkedHashMap<String,String> linkedHashMap = new LinkedHashMap<>();
    16 
    17         linkedHashMap.put("key3","value3");
    18         linkedHashMap.put("key2","value2");
    19         linkedHashMap.put("key4","value4");
    20         linkedHashMap.put("key1","value1");
    21 
    22         //存取顺序相同
    23         System.out.println(linkedHashMap);  //{key3=value3, key2=value2, key4=value4, key1=value1}
    24     }
    25 }

    2.JDK9的新特性

    集合中新增of方法:

    • List接口,Set接口,Map接口增加一个静态方法of,用于一次性给集合添加多个元素,不适用于接口的实现类
    • 使用of方法后不能再向集合中添加元素,不能调用add,put方法否则会抛出异常
    • 对于Set接口和Map接口使用of方法时,不能有重复元素否则会抛出异常

      

  • 相关阅读:
    cout的输出格式初探
    CVPR 2015 papers
    C语言的32个保留字
    读取siftgeo格式文件的matlab程序
    (转)各类排序算法总结
    被除数、除数、商、余数的正负号规律二
    被除数、除数、商、余数的正负号规律一
    FCKEditor上传图片word
    CKEditor上传图片word
    在线编辑器上传图片word
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/12117276.html
Copyright © 2020-2023  润新知