Java Map接口

2018-07-23  本文已影响29人  海人为记
常用方法 描述
V put(K key, V, value) 添加元素
如果键是第一次存储,直接存储值,返回null,否则将以前的值覆盖,返回以前的值
void clear() 移除所有的键值对元素
V remove(Object key) 根据键删除键值对元素,并把值返回
boolean containsKey(Object key) 判断集合是否包含指定的键
boolean containsValue(Object value) 判断集合是否包含指定的值
boolean isEmpty() 判断集合是否为空
Set<Map.Entry<K,V>> entrySet() 获取所有的键值对
V get(Object key) 根据键获取值
Set<K> keySet() 获取集合中所有键的集合
Collection<V> values() 获取集合中所有值的集合
int size() 返回集合中键值对的个数

实例

import java.util.HashMap;
import java.util.Map;

public class HashMapExercise {
    public static void main(String[] args) {

        exerciseMap();
    }
    public static void exerciseMap() {

        Map<String, Integer> map = new HashMap<>();
        // 添加方法
        map.put("小红", 18);
        map.put("小明", 30);
        map.put("小辉", 20);
        map.put("小李", 18);
        System.out.println(map);  // {小辉=18, 小明=18, 小李=18, 小红=18}
        //判断键是否存在
        boolean flg = map.containsKey("小明");
        System.out.println(flg); // true
        // 判断值是否存在
        flg = map.containsValue(18);
        System.out.println(flg); // true
        // 判断集合是否为空
        flg = map.isEmpty();
        System.out.println(flg); // false
        // 根据键获取值
        Integer i = map.get("小李");
        System.out.println(i); // 18
        // 获取集合中元素的个数
        int size = map.size();
        System.out.println(size); // 4
    }
}

Map集合的四种遍历方式

        // Map集合的四种遍历方式
        // 遍历结果
        // Key:小辉,Value:20
        // Key:小明,Value:30
        // Key:小李,Value:18
        // Key:小红,Value:18
        // 第一种: 通过keySet()方法获取到所有键的Set集合
        Set<String> keySet = map.keySet(); // map集合使用keySet()方法返回的是所有的key的值
        for (String str : keySet) {
            Integer in = map.get(str);
            System.out.println("Key:"+str+",Value:"+in);
        }

        // 第二种: 通过entrySet()方法获取所有的键值对的Set集合 Entry<String, Integer>
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet(); // map集合使用entrySet()方法返回的是所有的键值对
        // 通过这种方式获得的所有键值对还需要使用迭代器进行遍历
        Iterator<Map.Entry<String, Integer>> iterator = entrySet.iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, Integer> entry = iterator.next();
            System.out.println("Key:"+entry.getKey()+",Value:"+entry.getValue());
        }

        // 第三种: 使用foreach循环进行遍历;当容量较大时,推荐.
        for (Map.Entry<String , Integer> entry: map.entrySet()) {
            // Map.Entry<String, Integer> 映射项(键-值对)
            // 这种方法也可用于 keySet()和values()
            System.out.println("Key:"+entry.getKey()+",Value:"+entry.getValue());
        }


        // 第四种: 通过values()方法获取所有值的Collection集合
        // 遍历结果
        // value:20
        // value:30
        // value:18
        // value:18
        Collection<Integer> values = map.values();
        Iterator<Integer> it = values.iterator();
        while(it.hasNext()) {
            Integer value = it.next();
            System.out.println("value:"+value); // 我们不能通过值去进行键的查找
        }

注: 使用entrySet遍历方式要比keySet遍历方式快-------entrySet遍历方式获取Value对象是直接从Entry对象中直接获得,时间复杂度T(n)=o(1);
keySet遍历获取Value对象则要从Map中重新获取,时间复杂度T(n)=o(n);keySet遍历Map方式比entrySet遍历Map方式多了一次循环,多遍历了一次table,当Map的size越大时,遍历的效率差别就越大。

上一篇 下一篇

猜你喜欢

热点阅读