java基础--09(详解List集合)(转载)

1.List集合的三个子类

   这是众所周知的:

  • ArrayList

    • 底层数据结构是数组。线程不安全

  • LinkedList

    • 底层数据结构是链表。线程不安全

  • Vector

    • 底层数据结构是数组。线程安全

 看看ArrayList的JDK源码: 

1.ArrayList的构造方法:

  

2.Add方法:

动态扩容:

还有其他的add方法,get方法,remove()方法等等。

与扩容相关的基本上都是调用System.arraycopy()的arraycopy()方法,这是一个本地方法;

ArrayList是基于动态数组实现的,在增删时候,需要数组的拷贝复制

删除元素时不会减少容量,若希望减少容量则调用trimToSize()

它不是线程安全的。它能存放null值

问题:如果想要保证List集合的线程安全,又不想用老旧的Vector,怎么办呢?有其他的办法吗?

          答案是使用可以使用Collections的方法:List list = Collections.synchronizedList(new ArrayList(...));,就可以实现同步了

Vector和ArrayList还有一个区别就是Vector的扩容是扩为原来的额两倍。这也就是为什么Vector不用的原因,因为其同步,所以有性能的损失,再者因为其按百分之一百的比率增长,浪费内存。

ArrayList还有两个重要的API:

ensureCapacity(): 如果已经清楚数组能够存储数据的容量,就可以再填充数据前调用这个方法。
trimToSize(): 将存储区域的大小调整为当前元素数据量所需要的储存空间数目,垃圾回收器将回收多余的储存空间。

一个既能灵活扩充数组又能访问数组元素的技巧:

LinkedList解析:LinkedList底层是双向链表 主要方便实现往前遍历

1.源码

构造方法:两个

1.add方法:

 

总的来说:查询多用ArrayList,增删多用LinkedList。

发布了217 篇原创文章 · 获赞 70 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_37650458/article/details/87734256