JavaSE笔记10.8-集合-Map

一. Map概述

1. 定义

Map是一种键-值对(key-value)集合,Map集合中的每一个元素都包含一个键(key)对象和一个值(value)对象,用于保存具有映射关系的数据

Collection是单列集合,Map是双列集合

2. Map的特点
  • key和value都可以是任意引用类型的数据
  • key不允许重复,value可以重复
  • 每个key可以映射到最多一个value

二. Map的常见实现类

常见实现类:HashTable、HashMap、TreeMap

1. HashTable
  • 底层是哈希表数据结构
  • 按哈希算法来存取键对象,用作键的对象必须实现hashCode方法和equals方法
  • HashTable中元素的排列顺序是不固定的
  • 不可以存入null键null值
  • 该集合是线程同步的,效率低
2. HashMap
  • 底层是哈希表数据结构
  • 按哈希算法来存取键对象,用作键的对象必须实现hashCode方法和equals方法
  • HashMap中元素的排列顺序是不固定的
  • 可以存入null键null值
  • 该集合是线程不同步的,效率高
3. TreeMap
  • 底层是二叉树结构
  • 可以用于给Map集合中的键进行排序,具体是自然排序还是比较器排序取决于所使用的构造方法
  • 该集合是线程不同步的,效率高

构造方法:

(1)TreeMap()
  • 构造一个新的空的树图,根据键的自然排序进行排序
  • 插入到地图中的所有键必须实现Comparable接口
  • 只能添加相同数据类型的键对象,否则会抛出ClassCastException
(2)TreeMap(Comparator<? super K> comparator)
  • 构造一个新的空的树图,键对象根据指定的比较器进行排序(comparator为用于对该集合进行排序的比较器)
  • 只能添加相同数据类型的键对象,否则会抛出ClassCastException
(3)TreeMap(Map<? extends K,? extends V> m)
  • 构造一个包含指定树图中的元素的新树图,根据键的自然排序进行排序
  • 插入到地图中的所有键必须实现Comparable接口
  • 只能添加相同数据类型的键对象,否则会抛出ClassCastException

三. Map接口的共性方法

1. 添加
V put(K key,V value);//向Map集合中添加键-值对
void putAll(Map<?entends K,?entends V> m);//将指定Map中的key-value复制到本Map中

注意:对于put方法,如果添加时已有相同的键,那么后添加的值会覆盖原有的键对应的值,而且put方法会返回被覆盖的值

2. 删除
void clear();//删除该Map对象中所有的key-value对
V remove(Object key);//从Map集合中删除key对应的键-值对,并返回对应的value;如果该key不存在,则返回null
3. 判断
boolean containKey(Object key);//查询Map中是否包含指定的key,如果包含则返回true
boolean containValue(Object value);//查询Map中是否包含一个或多个value,如果包含则返回true
boolean isEmpty();//查询Map中是否为空(不包含任何key-value对),如果为空则返回true
4. 获取
V get(Object key);//返回Map集合中指定键对象所对应的值
int size();//返回Map集合中key-value对的个数
Collection<V> values();//返回Map里所有value组成的Collection
Set<K> keySet();//返回Map集合中所有键对象的Set集合
Set<Map.Entry<k,V>> entrySet();//返回Map集合中所有键-值对的Set集合,此Set集合中元素的数据类型为Map.Entry

注意:对于get方法,如果返回null,说明该键可能并不存在(虽然可能存在值为null但键不为null的情况)

5. 例子
import java.util.*;
class MapDemo{
   
    public static void main(String[] args) {
   
        //使用泛型,创建1个Map的子类对象
        Map<String,String> map=new HashMap<String, String>();
        //添加元素,如果添加时已有相同的键,那么后添加的值会覆盖原有的键对应的值,而且put方法会返回被覆盖的值
        System.out.println(map.put("01","zhangsan"));
        System.out.println(map.put("01","lisi"));
        System.out.println(map);
        //HashMap允许使用null键null值
        map.put(null,"aha");
        map.put("03","zhangsan3");
        map.put("02","zhangsan2");
        //判断
        System.out.println("containsKey: "+map.containsKey("02"));
        //获取
        System.out.println("get: "+map.get("02"));
        System.out.println("get: "+map.get(null));
        Collection<String> coll=map.values();
        System.out.println(coll);
        //删除
        System.out.println("remove: "+map.remove("02"));
        System.out.println(map);
    }
}

运行结果是:
在这里插入图片描述

四. Map集合的2种取出方法

Map集合没有迭代器,要先将Map集合转成Set集合,再通过迭代器取出

1. Set keySet()
(1)使用步骤
  • 将map中所有的键存入Set集合中
  • 因为Set集合具备迭代器,所以可以用迭代方式取出所有的键
  • 再根据get(Key)方法,获取每一个键对应的值
(2)keySet方法图例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值