Java Map 映射


Map

  • Map 集合没有继承 Collection 接口,提供的是键到值的映射,是存储 键-值对(key -value)的集合,详见:Java Collection 与 Map 的比较
  • 通过键来标识对象在映射中的存储位置,键不可重复,键本身不能决定存储位置,而是通过一种散列技术处理,产生一个散列码的整数值;
  • 散列码常用作偏移量,该偏移量对应分配给映射的内存区域的起始位置,从而确定存储对象在映射中的存储位置;
  • 当调用的映射中没有元素存在时,会引发 NoSuchElementException 异常,当对象与映射中的元素不兼容时,会引发 ClassCastException 异常,如果使用映射不允许使用的 null 对象,会引发 NullPointerException 异常,当试图改变一个不允许修改的映射时,会引发 UnsupportedOperationException 异常;
  • java.util.Map,详见:Interface Map<K,V>

1. 转换为集合(Set,Collection)

  • 映射不是类集,但是可以获得类集的视图,可以使用 entrySet() 方法,它返回一个包含了映射中元素的集合(Set),用 keySet() 可以得到键的类集视图,用 values() 可以得到值得类集视图;
类型方法说明
SetentrySet()返回 Map 集合中所有键-值对的 Set 集合,Set 集合中元素的数据类型是 Map.Entry
SetkeySet()返回 Map 中所有键对应的 Set 集合
Collectionvalues()返回一个映射中包含的值得类集,映射循环使用 get() 和 put(),put() 将一个指定了键的值加入映射,可以使用键作为参数来调用 get() 方法,返回该值

2. 提供的方法

类型方法说明
Objectput(Object key, Object value)向 Map 集合中添加键-值对,返回键以前对应的值并把指定键所对应的值替换成指定的新值,如果没有这个键对应的值返回 null 并把指定的键值添加到集合中
voidputAll(Map m)将所有来自 m 的输入加入调用映射
Objectget(Object key)返回指定键映射的值,如果此映射不包含该键的映射关系返回 null,Object 是值的数据类型
voidclear()删除所有键-值对
intsize()返回映射中键-值对的个数
inthashCode()返回调用映射的散列码
booleanisEmpty()如果映射是空的,返回 true
booleancontainsKey(Object k)如果映射包含了键 k,返回 true
booleancontainsValue(Object v)如果映射包含了值 v,返回 true
Objectremove(Object k)删除键为 k 的输入
booleanequals(Object o)如果 o 是映射并包含了相同的输入,返回 true
Set< K>keySet()获取 Map 集合中所有的键,存储到 Set 集合中
Set<Map.Entry<K,V>>entrySet()获取到 Map 集合中所有的键值对对象的集合(Set集合)
import java.util.HashMap;

public class test {
    public static void main(String[] args) {
        //创建 map对象
        HashMap<String, String> map = new HashMap<String, String>();

        //添加元素到集合
        map.put("黄晓明", "杨颖");
        map.put("文章", "马伊琍");
        map.put("邓超", "孙俪");
        System.out.println(map);

        //String remove(String key)
        System.out.println(map.remove("邓超"));
        System.out.println(map);

        // 想要查看 黄晓明的媳妇 是谁
        System.out.println(map.get("黄晓明"));
        System.out.println(map.get("邓超"));
    }
}

3. 遍历

  • Map 集合不能直接使用迭代器或者 for each 进行遍历(转成 Set 之后可以使用);

方式1. 键找值方式

方式1

方式2. 键值对方式(转成 Set)

方式2


3. 常用子类

Map 接口中的集合都有两个泛型变量 <K,V>,在使用时,要为两个泛型变量赋予数据类型。两个泛型变量 <K,V> 的数据类型可以相同,也可以不同;

  • HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的 hashCode() 方法、equals() 方法,key 与 value 都可以为 null,线程不安全,详见:Java HashMap 哈希映射
  • TreeMap<K,V>:TreeMap 集合和 Map 相比没有特有的功能,底层的数据结构是红黑树;可以对元素的键进行排序,排序方式有两种:自然排序和比较器排序,key 不能为null,value 可以为 null,线程不安全,详见:Java TreeMap 树映射
  • LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法,详见:Java LinkedHashMap 链式哈希映射
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值