√ JavaSE - 21.怎么使用Map(卷1 P394 P403 P419)

  1. 集合的基本接口之二是Map接口,与Collection接口不同,Map接口存储的是双列数据
  2. Map接口中的key是无序的、不可重复的,使用Set接口存储;value是无序的、可重复的,使用List接口存储;entry(key-value)是无序的、不可重复的,使用Set接口存储。
  3. Map的底层实现原理:调用map.put(key,value)时,先调用key.hashCode()计算key的哈希值,根据哈希值计算出该键值对在entry[]中的存放位置,如果此位置上为空,则直接添加,否则比较key与该位置上的所有键值对的key的哈希值,若都不相同,则直接添加,否则调用equals()与哈希值相同的key比较,若都不相同,则直接添加,否则用该value替换原来的value。
  4. key需要重写equals()和hashCode(),value需要重写equals()。
  5. 当数组某一个位置上的元素以链表形式存储的个数大于8,且当前数组长度大于64时,则该位置上的所有数据改为红黑树存储。
  6. HashMap类是线程不安全的,但是效率高,可以存储null的key和value。
  7. Hashtable类是线程安全的,但是效率低,不能存储null的key和value。
  8. LinkedHashMap类继承自HashMap类,但是在底层结构上添加了一对指针,分别指向前一个元素和后一个元素,方便遍历时按照添加的顺序遍历,适合频繁遍历。
  9. TreeMap类底层使用红黑树存储,按照key自然排序或定制排序。
  10. Properties类继承自Hashtable类,一般作为配置文件,key和value都是String类型。
  11. 可以调用Collections.synchronizedMap()返回线程安全的HashMap对象。
import java.util.*;

public class MapTest {
    public static void main(String[] args) {
        System.out.println("---HashMap---");
        Map<String, String> hashMap = new HashMap<>();
        hashMap.put(null, null);
        hashMap.put("b", null);
        hashMap.put("c", "3");
        System.out.println(hashMap);
        Set<String> keySet = hashMap.keySet();
        Collection<String> values = hashMap.values();
        Set<Map.Entry<String, String>> entrySet = hashMap.entrySet();
        System.out.println(keySet);
        System.out.println(values);
        System.out.println(entrySet);
        Map<String, String> map = Collections.synchronizedMap(hashMap);
        System.out.println(map);

        System.out.println("---Hashtable---");
        Map<String, String> hashtable = new Hashtable<>();
        hashtable.put("a", "1");
        hashtable.put("b", "2");
        hashtable.put("c", "3");
        System.out.println(hashtable);

        System.out.println("---LinkedHashMap---");
        LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<>();
        linkedHashMap.put(null, null);
        linkedHashMap.put("b", null);
        linkedHashMap.put("c", "3");
        System.out.println(linkedHashMap);

        System.out.println("---TreeMap---");
        TreeMap<String, String> treeMap = new TreeMap<>();
        treeMap.put("a", "1");
        treeMap.put("c", "2");
        treeMap.put("b", "3");
        System.out.println(treeMap);

        System.out.println("---Properties---");
        Properties properties = new Properties();
        properties.put("a", "1");
        properties.put("b", "2");
        properties.put("c", "3");
        System.out.println(properties);
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值