JAVA 容器,LinkedList、arraylist 源码分析。容器、集合类对比,arraylist、vector、

本文深入探讨了Java中的ArrayList、LinkedList和Vector容器,详细分析了它们的源码,揭示了它们在添加、删除、扩容等方面的性能差异。此外,还介绍了Queue与List的区别,以及ArrayBlockingQueue在并发场景的应用。同时,文章提到了Collections工具类对List的排序、查找、随机排序和复制等操作。
摘要由CSDN通过智能技术生成

 

 

List 与Set接口

Collection 接口存储一组不唯一、无序的对象

List接口存储一组不唯一、有序(插入顺序)的对象

Set接口存储一组唯一、无序的对象

Map接口存储一组键值对象,提供key到value的映射

 

set接口中的实现类

HashSet:采用Hashtable哈希表存储结构

优点:添加速度快,查询速度快,删除速度快

缺点:无序

TreeSet

采用二叉树(红黑树)的存储结构

优点:有序(排序后的升序)查询速度比List快

缺点:查询速度没有HashSet快

 

java 容器 collection 和map的区别。collection中存储了一组对象,而map存储的是key、value,并且key不能重复。

Map:

HashMap:非线程安全、无序、key不重复。

TreeMap:非线程安全、有序、key不重复。

Hashtable:线程安全、无序、不重复。

ConcurrentHashMap:线程安全,有序、不重复。

 

Collection

set:  有序、不重复对象

TreeSet:非线程安全、有序、不重复。

HashSet:非线程安全、有序、不重复。

 

List:  按插入顺序、对象可重复

TreeList:非线程安全、按插入顺序、可重复。

ArrayList:非线程安全、插入顺序、可重复。

LinkedList:非线程安全、插入顺序、可重复。

Vector:线程安全、插入顺序、可重复。

 

Arraylist : 初始大小为10,原大小+ 原大小右移1位 = 1.5 扩容。oldCapacity + (oldCapacity >> 1)。插入删除时都会copy一份。

Vector: 直接2倍扩容。oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity)

HashMap: 初始16 ,2倍(2的n次幂)扩容.左移1位.newCap = oldCap << 1

为什么hashmap容量是2的n次幂?

1.方便进行 与 运算 (HashMap: 376行),与运算比取模运算效率高

2.在扩容之后涉及到元素的迁移过程,迁移的时候只需要判断二进制的前一位是0或者1即可。

   如果是0,表示新数组和旧数组的下标位置不变,如果是1,只需要将索引位置加上旧的数组的长度值即为新数组的下标

 


ArrayList 源码分析

add(Object o )

/**
     * 将当前数组大小+1传入 ensureCapacityInternal方法
     * 将e 对象添加到 elementData 数组的 当前数组+1位置。数据的最后一位,非数组的末尾!!!
     * 并且每次添加对象,数组的大小都会1.5倍扩张
     */
    public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // 当前数组大小 + 1
        elementData[size++] = e;
        return true;
    }

    /**
     * 判断下 elementData 是否是空的,空的就取最小值10
     * 如果当前数组&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值