[Java 集合]Set & Map

首先介绍一下Collection接口和Map接口的继承体系:

  1. Collection接口:
Collection接口继承体系.JPG

2. Map接口:

Map接口继承体系

①Set 和 Map 的关系

  • Map集合的所有Key具有set的特征。

  • 若将Map的key-value对视作整体,则Map也可视作set

Map本质上是一个关联数组:key数组 + value数组,将一一对应的key和value绑定在一起就形成了Map

②HashSet 和 HashMap

  • HashSet:系统使用Hash算法决定元素的存储位置

  • HashMap: 系统将value当成key的附属物,根据Hash算法决定key的存储位置

当程序执行put方法时,系统将调用键名的hashCode方法得到其hashCode值,之后系统将根据该hashCode值决定该元素的存储位置。
创建HashMap时可传入初始capacity 和 load factor, initial capacity默认为16,load factor默认为0.75。

HashMap中:
1. size变量保存了map中包含的key-value对的数量
2. threshold变量包含了HashMap能容纳的key-value对的极限,等于HashMap的容量乘以负载因子(load factor)
3. 当size++ >= threshold,HashMap会自动调用resize方法扩充HashMap的容量。每扩充一次HashMap的容量就增大一倍
4. 当创建一个HashMap时,系统会自动创建一个table数组来保存HashMap中的entry

//  HashMap构造器:
public HashMap(int initialCapacity, float loadFactor) {
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal initial capacity: " +
                                               initialCapacity);
        if (initialCapacity > MAXIMUM_CAPACITY)
            initialCapacity = MAXIMUM_CAPACITY;
        if (loadFactor <= 0 || Float.isNaN(loadFactor))
            throw new IllegalArgumentException("Illegal load factor: " +
                                               loadFactor);
        this.loadFactor = loadFactor;
        this.threshold = tableSizeFor(initialCapacity);
}

Java集合实际上是多个引用变量所组成的集合,这些引用变量指向实际的Java对象

ArayList底层是基于数组实现的。每次创建ArrayList时传入的int参数是它所封装的数组长度。若创建时未传入参数,那么ArrayList的初始长度为0,底层封装的数组长度为10。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容