Java集合框架——Collection篇

引言

在使用Java时,正确的集合类型选择,能帮我们提高代码的运行效率;

那么常见的单例集合类型有哪些呢?

按照类型来分的话单例集合总体分为三种:List、Set、Queue;

List

List集合的特点是有序,并且允许出现重复元素;

ArrayList:基于Object[]]数组实现,可以根据下表遍历数组,适用于查询遍历的使用场景;

LinkedList:基于双向链表实现,不具有下标,但在插入、删除等场景下有不错的性能表现;

Vector:基于Object[]数组实现,是基于synchronized实现的线程安全的集合,性能略差;

Stack:Vector的子类,提供了FILO的栈结构;

CopyOnWriteArrayList:基于Object[]数组实现,使用ReentrantLock实现线程安全(哈希冲突的情况下);

Set

Set集合的特点是无序,且不允许重复;

HashSet:HaspMap的子类,采用Key存储数据,实现了元素的无序且唯一;

LinkedHashSet:HaspSet的子类,元素唯一,有序;

TreeSet:TreeMap的子类,自动排序或者是按照自定义规则排序;

Queue

Queue集合的特点是FIFO先进先出;

LinkedList:基于双向链表实现的队列集合;

PriorityQueue:优先队列,内部数组结构是一个基于Object[]数组实现的一个小顶堆,在小顶堆中,根节点始终是堆中具有最小值的元素,所以PriorityQueue非常适合需要按优先级顺序处理业务的场景;

BlockingQueue:阻塞队列,线程安全,适合多线程并发的场景;

ArrayList和Vector的区别

初始容量:

ArrayList的初始容量默认为0,添加第一个元素时扩容为10;

扩容方式:

ArrayLis:t在元素超出数组容量时扩容机制是原数组长度X1.5;

Vector:扩容是原基础扩容1倍;

线程安全:

ArrayList:线程不安全;

Vector:线程安全,基于synchronized实现;

执行效率:
Vector在每次操作时需要重复加锁---释放锁,所以性能较差,ArrayList相对具有较好的性能;

ArrayList和LinkedList的区别

底层数据结构:

ArrayList:基于数组实现;

LinkedList:基于双向链表实现;

插入和删除元素:

ArrayList:在插入和删除的场景中需要对整个数组进行复制移动,性能消耗大;

LinkedList:在插入和删除场景中只影响相邻的元素,性能较优;

查询和遍历元素:

ArrayList:可以根据下标查找和遍历,性能较优;

LinkedList:需要借助迭代器遍历,性能较差;

实现RandomAccess:

ArrayList:实现了RandomAccess接口,因为它内部是数组结构,内部空间连续,可以通过下标随机访问;

LinkedList:没有实现RandomAccess接口,它内部是链表结构,空间不连续,无法通过下标快速访问;

ArrayList的扩容机制

初始化时,不带参时默认初始容量为0,写入第一个元素时,扩容为10;

初始化时,带参构造则按照所带参数初始化容量;

当数组容量满了的时候,会按照原容量的1.5倍扩容;

最大容量不会超过Integr.Max_Value;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值