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)

猜你喜欢

转载自www.cnblogs.com/smiling-crying/p/9388138.html