栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java集合框架list你了解多少?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java集合框架list你了解多少?

本文是关于list从浅入深的追问系列~

目录

一、Vector和ArrayList、linkedList联系和区别?分别的使用场景

 二、如需要保证线程安全,ArrayList应该怎么做,用有几种方式

 三、了解CopyOnWriteArrayList吗?和 Collections.synchronizedList实现线程安全有什么区别, 使用场景是怎样的?

四、说下ArrayList的扩容机制

 


一、Vector和ArrayList、linkedList联系和区别?分别的使用场景

线程是否安全:

        ArrayList:底层是数组实现,线程不安全,查询和修改非常快,但是增加和删除慢(数组增加删除操作需要移动很多元素)
        linkedList: 底层是双向链表,线程不安全,查询和修改速度慢,但是增加和删除速度快
        Vector: 底层是数组实现,线程安全的,操作的时候使用synchronized进行加锁


使用场景:

        Vector已经很少用了
        增加和删除场景多则用linkedList
        查询和修改多则用ArrayList

add方法源如下图:

 二、如需要保证线程安全,ArrayList应该怎么做,用有几种方式

方式一:自己写个包装类,根据业务一般是add/update/remove加锁 

方式二:Collections.synchronizedList(new ArrayList<>()); 使用synchronized加锁

方式三:CopyOnWriteArrayList<>()  使用ReentrantLock加锁
​Collections.synchronizedList里面的get方法都有加锁。CopyOnWriteArrayList中get方法没有加锁。

 

 三、了解CopyOnWriteArrayList吗?和 Collections.synchronizedList实现线程安全有什么区别, 使用场景是怎样的?

CopyOnWriteArrayList:执行修改操作时,会拷贝一份新的数组进行操作(add、set、remove等),代价十分昂贵,在执行完修改后将原来集合指向新的集合来完成修改操作,
源码里面用ReentrantLock可重入锁来保证不会有多个线程同时拷贝一份数组
场景:读高性能,适用读操作远远大于写操作的场景中使用(读的时候是不需要加锁的,直接获取,删除和增加是需要加锁的, 读多写少)
 
Collections.synchronizedList:线程安全的原因是因为它几乎在每个方法中都使用了synchronized同步*锁
场景:写操作性能比CopyOnWriteArrayList好,读操作性能并不如CopyOnWriteArrayList

 CopyOnWriteArrayList的设计思想是怎样的,有什么缺点?
设计思想:读写分离+最终一致
缺点:内存占用问题,写时复制机制,内存里会同时驻扎两个对象的内存,旧的对象和新写入的对象,如果对象大则容易发生Yong GC和Full GC

四、说下ArrayList的扩容机制

注意:JDK1.7之前ArrayList默认大小是10,JDk1.7之后是0

4.1未指定集合容量,默认是0,若已经指定大小则集合大小为指定的;
4.2当集合第一次添加元素的时候,集合大小扩容为10
4.3ArrayList的元素个数大于其容量,扩容的大小= 原始大小+原始大小/2

当new ArrayList();不指定时候,默认是0.

 当集合第一次添加一个元素的时候,集合大小默认为10

 源码解读 JDK ArrayList 扩容核心源码

调试代码:

List list = new ArrayList<>();
​for(int i=0;i<10;i++){
    list.add(""+i);
}
System.out.println(list.size());
​list.add("wwww.baidu.net");
​System.out.println(list.size());

执行​list.add("wwww.baidu.net");这行的时候,进行扩容。如下图:

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/694401.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号