Map集合

Map

Map接口是一种双列集合,它的每个元素都包含一个键对象Key和一个值对象Value,键和值对象之间存在一种对应关系,称为映射。一个映射不能包含重复的键,每个键最多只能映射到一个值。从Map集合中访问元素时,只要指定了Key,就能找到对应的Value。

Set底层依赖的是Map

1.V put(K key,V value):添加元素。如果键是第一次存储,就直接存储元素,返回null。如果键不是第一次存储,就用值把以前的值替换掉,返回以前的值。

2.void clear():移除所有键值对元素

3.V remove(Object key):根据键删除键值对元素,并把值返回

4.boolean containsKey(Object key):判断集合是否包含指定的键

5.boolean containsValue(Object Value):判断集合是否包含指定的值

6.boolean isEmpty():判断集合是否为空

7.Set<Map.Entry<E,V>> entrySet():返回此映射中包含的映射关系的Set视图

8.V get(Object key):根据键获取值

9.Set<K> keySet():获取集合中所有键的集合

10.Collection<V> values():获取集合中所有值的集合

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

遍历

第一种方式就是先遍历Map集合中所有的键,再根据键获取相应的值。

package com.first;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class HelloWorld {
    public static void main(String[] args) {
        Map<String, Integer> map=new HashMap<>();
        map.put("张三", 23);
        map.put("李四", 24);
        map.put("王五", 25);
        map.put("赵六", 26);

        Set<String> keySet=map.keySet();
        Iterator<String> it=keySet.iterator();
        while (it.hasNext()) {
            String key = (String) it.next();
            Integer value=map.get(key);
            System.out.println(key+"="+value);
        }
    }
}

运行结果为

赵六=26
张三=23
李四=24
王五=25

用增强for循环可简写为

for(String key:map.keySet()){
  System.out.println(key+"="+map.get(key));
}

第二种方式是先获取集合中的所有映射关系,然后从映射关系中取出键和值。

Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
Iterator<Map.Entry<String, Integer>> it = entrySet.iterator();
while (it.hasNext()) {
    // 获取每一个Entry对象
    Map.Entry<String, Integer> en = it.next(); // 父类引用指向子类对象
    // Entry<String, Integer> en = it.next(); //直接获取的是子类对象
    String key = en.getKey(); // 根据键值对对象获取键
    Integer value = en.getValue(); // 根据键值对对象获取值
    System.out.println(key + "=" + value);
}

首先调用Map对象的entrySet方法获得存储在Map中所有映射的Set集合,这个集合中存放了Map.Entry类型的元素(Entry是Map接口内部类),每个Map.Entry对象代表Map中的一个键值对,然后迭代Set集合,获得每一个映射对象,并分别调用映射对象的getKey和getValue方法获取键和值。

用增强for循环可简写为

for(Entry<String, Integer> en : map.entrySet()) {
    System.out.println(en.getKey() + "=" + en.getValue());
}

第二种方法的效率更高。

HashMap和Hashtable

共同点:底层是哈希算法,都是双列集合

区别:

  • Hashtable是线程安全的,效率低(目前基本被HashMap所取代),JDK1.0版本。HashMap线程不安全,效率高,JDK1.2版本
  • Hashtable不可以存储null键和null值。HashMap可以存储null键和null值。

LinkedHashMap

HashMap集合迭代出来元素的顺序和存入的顺序是不一致的。如果想让这两个顺序一致,可以使用LinkedHashMap类,和LinkedList一样也使用双向链表来维护内部元素的关系,使Map元素迭代的顺序和存入的顺序一致。

Properties

  • String getProperty(String key)
  • String getProperty(String key,String defaultValue)
  • void load(Reader reader):按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。

Properties主要用来存储字符串类型的键和值,在实际开发中使用Properties集合来存取应用的配置项。

TreeMap

TreeMap通过二叉树的原理来保证键的唯一性,与TreeSet集合存储的原理一样,TreeMap中所有键是按照某种顺序排列的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值