zoukankan      html  css  js  c++  java
  • Java学习之路(九):Map集合

    Map集合概述和特点

    Map是属于java.util的一个接口Map<k,v>

    • k:映射所维护的键的类型
    • v:映射值的类型

    Map是将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

    Map接口和Collection接口的不同

    • Map是双列的,Collection是单列的
    • Map的键唯一,Collection的Set是唯一的
    • Map集合的数据结构只针对键有效,跟值无关
    • Collection集合的数据结构是针对元素有效的

    Map集合的功能概述

    添加功能:

    • V put(K key,V value):添加元素
    • 如果键是第一次存储,直接存储元素,返回null
    • 如果键不是第一次存储,就用本次存储的值将之前的值给替换掉,将以前的值给弹出

    删除功能:

    • void clear():移除所有的键值对元素
    • V remove(Object key):根据键删除键值对元素,并把值返回

    判断功能:

    • boolean containsKey(Object key):判断集合是否包含指定的键
    • boolean containsValue(Object value):判断集合是否包含指定的值
    • boolean isEmpty():判断集合是否为空

    获取功能:

    • V get(Object key):根据键获取值
    • Set<K> KeySet():获取集合中所有键的集合
    • Collection<V> values():获取集合中所有值的集合

    长度功能:

    • int size():返回集合中的键值对的个数

    Map是一个接口,一般我们都是使用它的子类HashMap

    HashMap使用注意事项

    1. 声明HashMap时的键值可以是任意对象
    2. 如果有重复的键,会把以前的替换
    3. 值可以为空(null)
    4. 键能为空
    5. put方法的返回值
      1. 如果键是第一次存值,就直接储存元素,返回null
      2. 如果键不是第一次存在,就用值把以前的值替换掉。返回以前的值

    HashMap的一个简单的例子(第一种遍历方法:不推荐)

    package lesson0006;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    public class Demo01 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            Map<String,String> map = new HashMap<>();
            map.put("k1","v1");
            map.put("k2","v2");
            map.put("k3","v3");
            map.put("k4","v4");
            
            //获取所有的key
            Set<String> keys = map.keySet();
            for(String k:keys){
                String value = map.get(k);
                System.out.println("Key:"+k+"-Value:"+value);
            }
            
            
        }
    
    }

    HashMap的另一个简单的例子(第二种遍历方法:推荐)-通过键值对对象(Entry)找键和值

    package lesson0006;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
    
    public class Demo02 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            Map<String,String> map = new HashMap<>();
            map.put("k1","v1");
            map.put("k2","v2");
            map.put("k3","v3");
            map.put("k4","v4");
            
            
            //获取所有的key
            Set<Entry<String, String>> entrySet =  map.entrySet();
            for(Entry entryObj:entrySet){
                Object k = entryObj.getKey();
                Object value = entryObj.getValue();
                System.out.println("Key:"+k+"-Value:"+value);
            }
            
            
            
        }
    
    }

    Entry的一些分析:

    • Map.Entry是一个键值对对象
    • Map.Entry是一个接口,它的实现类对象是HashMap$Node
    • Map.Entry是有个key和value属性,通过get方法可以取值
    • 我们遍历Entry的方法一般有迭代器和增强for循环

    LinkedHashMap

    特点:底层是链表实现的,所以可以保证怎么存就怎么取

    HashMap和Hashtable的区别

    • Hashtable是JDK1.0版本出现的,是线程安全的,所以也是效率低下的。
    • HashMap是JDK1.2版本出现的,是线程不安全的,效率高
    • Hashtable不可以存储null键和null值,HashMap可以存储null键和null值

    这里是补充的一点Collections工具类的概述和常见方法

    Collections类的概述:是一个针对集合操作的工具类

    Collections的成员方法:

    • public static<T> void sort(List<T> list)
    • public static<T> int binarySearch(List<?> list,T Key)
    • public static<T> T max(Collection<?> coll)
    • public static void reverse(List<?> list)
    • public static void shuffle(List<?> list)

    泛型补充:

    ? extends E(E的子类)   针对存的操作   ?表示子类,E表示父类

    eg:ArrayList.addAll(Collection<? extends Father> c)

    ? super E(E的父类)   针对取的操作      ?表示父类,E表示子类

    eg:ArrayList.sort(Comparator<? super Son> c)

  • 相关阅读:
    PyCharm设置改变字体大小的快捷键
    python中的字符串
    python入门知识
    css3(border-radius)边框圆角详解
    js中__proto__和prototype的区别和关系?
    常见的浏览器兼容问题
    Meta http-equiv属性详解(转)
    WinForm界面设计-Button添加背景图去边框
    vs2015 c# winfrom应用程序打包成64位
    vsto-Word相关操作
  • 原文地址:https://www.cnblogs.com/smiling-crying/p/9388138.html
Copyright © 2011-2022 走看看