集合框架List、Map

Iterable接口

  • 定义了迭代集合的迭代方法

Collection接口

  • 定义了集合添加的通用方法
List接口
  • 元素被添加到集合中以后,取出的时候是按照放入顺序。
  • List可以重复。
  • 存在下标,可以直接依靠下标取值
ArrayList类
  • 底层是一个Object数组。
  • 初始容量为10
  • 当数组容量不够是自动扩容为以前的1.5倍
  • 数组最大容量为Integer.MAX_VALUE-8
  • 线程不安全

可变数组的大小,对尾部成员的增加和删除支持较好。使用 ArrayList 创建的集合,允许对集合中的元素进行快速的随机访问(检索集合中特定索引位置的元素),向 ArrayList 中插入与删除元素的速度相对较慢

Vector类
  • 底层是一个Object数组。
  • 初始容量为10
  • 当数组容量不够是自动扩容为以前的1倍
  • 数组最大容量为Integer.MAX_VALUE-8
  • 线程安全
LinkedList类

采用链表结构保存对象,便于向集合中插入或者删除元素。
检索集合中特定索引位置的元素,速度则相对较慢。
链表不需要连续的空间, 大小不确定

Set接口
  • 插入无序
  • 元素不能重复
  • 底层均为Map集合实现
TreeSet类
  • 同时实现了 Set 接口和 SortedSet 接口
  • 默认升序排序。
HashSet 类
  • 不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变化。
  • HashSet 不是同步的,如果多个线程同时访问或修改一个 HashSet,则必须通过代码来保证其同步。
  • 集合元素值可以是 null。
  • 底层基于HashMap
LinkedHashSet类

底层基于LinkedHashMap实现,通过LinkedHashMap中的方法实现了顺序存值

Map类
  • 键值对的形式存放数据
  • 定义了通用的方法
  • 不可重复
HashMap类
  • 底层实现:数组+链表或者红黑树
  • 在1.8以后,当链表的节点数量大于或者等于8的时候且数组的容量大于64的时候,就会将链表转换为红黑树
  • 初始容量为16:hash算法,保证哈希值平均分布,只有当为16的时候才可以最大程度的保证平均分布
  • 线程不安全的
  • 扩容2倍
	//计算大于等于当前数值的 最小 二的整数次方 的整数 的方法
    static final int tableSizeFor(int var0) {
    	//减一是为了防止出现二的整数幂时,没有把自身包含进范围
        int var1 = var0 - 1;
        var1 |= var1 >>> 1;
        var1 |= var1 >>> 2;
        var1 |= var1 >>> 4;
        var1 |= var1 >>> 8;
        var1 |= var1 >>> 16;
        return var1 < 0 ? 1 : (var1 >= 1073741824 ? 1073741824 : var1 + 1);
        //得到的结果是1,2,4,8.。。。
        //对应就是2的整数幂:2^0,2^1,2^2,2^3……
    }

例如:Map map = new HashMap(1000);

  • 通过tableSizeFor计算出来初始容量为1024,
  • 默认加载因子为0.75,
  • 所以扩容阈值为 1024 * 0.75 = 768
  • 所以存入第 769 个元素时进行扩容
LinkedHashMap类
  • 可以顺序的输出用户所输入的数据
TreeMap类
  • 底层实现:红黑树
  • 继承了NavigableMap接口,NavigableMap接口继承了SortedMap接口,可支持一系列导航方法即导航操作
  • 实现了Cloneable接口,可被克隆
  • 自然排序
  • 线程不安全的
  • TreeMap不涉及扩容操作, 因为它使用树结构进行存储.
HashTable类
  • 线程安全
  • 底层实现:哈希表+链表
  • 初始化,大小为11
  • 扩容时,将容量变为原来的2倍加1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值