美文网首页
Java集合List

Java集合List

作者: 潇潇秋风 | 来源:发表于2020-03-20 22:04 被阅读0次

说下Vector、ArrayList、LinkedList联系和区别?使用场景?

答案:线程安全:

ArrayList:

底层是数组实现的,线程不安全,查询和修改速度快,新增和删除速度慢。

LinkedList:

底层是双向链表,线程不安全,查询和修改速度慢,新增和删除速度快。

Vector:

底层是数组实现的,线程安全的,操作的时候使用synchronized进行加锁。

使用场景:

Vector已经很少使用了

增加和删除场景多使用LinkedList

查询和修改多使用ArrayList

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

自己写个包装类,根据业务加锁

Collections.synchronizedList(new ArrayList<>());使用synchronzied加锁

CopyOnWriteArrayList<>() 使用ReentrantLock加锁

CopyOnWriteArrayList和Collections.synchronizedList实现线程安全有什么区别?使用场景?

CopyOnWriteArrayList:

执行修改操作是,会拷贝一份新的数组进行操作,代价十分昂贵,在执行完修改后将原来集合指向新的集合来完成操作,源码里面用ReentrantLock可重入锁保证不会有多个线程同时拷贝一份数组。

场景:

读高性能,使用于读操作远远大于写操作(读的时候不需要加锁,删除和增加需要加锁,读多写少)

Collections.synchronizedList:线程安全的原因是因为它几乎在每个方法中都使用了synchronized同步锁。

场景:

写操作性能比CopyOnWriteArrayList好,读操作性能并不如CopyOnWriteArrayList。

CopyOnWriteArrayList的设计思想是怎么样的,有什么缺点?

答案:

设计思想:

读写分离+最终一致

缺点:

内存占用问题,写时复制机制,内存里面会同时存在两个对象的内存,旧的对象和新写入的对象,如果对象大则容易发生Yong GC和Full GC。

ArrayList的扩容机制?

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

    为指定集合容量,默认是0,指定大小则集合大小为指定容量

ArrayList的元素个数大于其容量,扩容大小=原始大小+原始大小/2

相关文章

  • java list转json 和json 转list 笔记

    java list集合转json json 数组转list集合 bean类 完整代码:

  • 数组和集合(二)

    List集合 与 Java类似,List集合的最大特征就是集合元素都有对应的顺序索引 List集合允许使用重复元素...

  • java——集合、多线程

    集合 java中的集合一般分为List、Map、Set、Queue。 List 列表集合 ArrayList:最常...

  • Java集合

    1、java 集合概述 Set :无序、不可重复的集合。 List : 有序、重复的集合。 Queue:Java ...

  • Java基础

    Java集合框架 一、Java集合类简介: Java集合大致分为四种体系:Set:无序、不可重复的集合List:有...

  • 深入学习List集合

    Java List 是一个有序集合。Java List 是扩展 Collection 接口的接口。Java Lis...

  • java集合----List

    csdn 个人博客 一.List java 中的 List 是一种类似于列表的集合,Java集合----Map说过...

  • 分享一篇大佬的笔记,List集合特点+常见方法讲解,建议收藏!

    List集合 java.util.List接口extends Collection接口 List接口的特点: 有序...

  • 集合

    java集合接口有List,Set,Map。 List和Set都实现了Collection(对集合排序,遍历)接口...

  • java集合

    java集合 集合之间的关系 Collection├List│├LinkedList│├ArrayList│└Ve...

网友评论

      本文标题:Java集合List

      本文链接:https://www.haomeiwen.com/subject/xpwdyhtx.html