List集合

Posted qingmuchuanqi48

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了List集合相关的知识,希望对你有一定的参考价值。

List集合

  List集合的特点有:有序,有索引,可重复.

list接口下面有三个实现类:LinkedList,ArrayList,Vector

  ArrayList集合的特点:有序有索引可重复

        基于数组实现,每次增删都要创建新的数组,但是数组有索引,数组增删快,查找慢.轻量级(线程不安全)

  Vector集合:基于数组,线程安全,效率低,重量级(使用少)

  LinkedList:基于双向链表实现,每个元素存储本身内存地址的同时还存储下一个元素的地址,链表增删快.查找慢(线程不安全).

ArrayList集合

  底层是Object数据,所以Arraylist具有数组的查询速度快的有点但是增删慢的缺点.

  其中ArrayList有一个自动扩容的机制:

  实现机制:ArrayList.ensureCapacity(int minCapacity)

  首先得到当前elementData  属性的长度为oldCapacity

  然后通过判断oldCapacity和minCapacity参数谁大来决定是否需要扩容,如果minCapacity大于oldCapacity,那么我们就对当前的List对象进行扩容.

  扩容的策略为:取(oldCapacity*3)/2+1和minCapacity之间更大的那个,然后使用数组拷贝的方法,把以前存放的数据转移到新的数组对象中,.

  如果minCapacity不大于oldCapacity那么就不进行扩容.

简单的说就是,ArrayList底层是使用数组进行实现的,然后,创建一个新的ArrayList集合时候,就相当于创建了一个新的数组,数组长度是固定的,然后,进行自动扩容时候,会创建一个新的数组,用来就老的数组进行替换掉.

LinkedList集合

        底层是一种双向循环链表,在此链表上每一个数据节点都由三部分组成:前指针(前面节点的位置),数据,后指针(指向后面的节点的位置),最后一个节点的后指针指向第一个节点的前指针,形成一个循环.

  双向循环链表的查询效率低但是增删效率高.

  利用LinkedList实现栈(stack).队列(queue),双向队列(double-ended queue)

  它具有方法addFirst(),addLast().getFirst().getLast().removeFirst().removeLast()等

  经常用在增删操作较多而查询操作很少的情况下:

  队列和堆栈.

  队列:先进先出的数据结构

  栈:后进先出的数据结构.

用LinkedList实现队列:

  队列(Queue)是限定所有的插入只能在表的一端进行,而所有的删除都在表的另一端进行的线性表.

  表中允许插入的一段称为队尾(Rear),允许删除的一端称为队头(Front)

  队列的操作是按先进先出(FIFO)的原则进行的.

  队列的物理存储可以用顺序存储结构,也可以用链式存储结构.

  注意:使用栈的时候一定不能提供方法让最后一个元素的元素得出栈的机会,

用LinkedList实现栈:

  栈(stack)也是一种特殊的线性表,是一种后进先出(LIFO)的结构,

  栈是限定仅在表尾进行插入和删除运算的线性表,表尾称为栈顶(top),表头称为栈底(bottom)

  栈的物理存储可以用顺序存储结构,也可以用链表存储结构.

Vector

  (与ArrayList相似,区别Vector是重量级的组件,使用使得消耗资源比较多.)

  结论:在考虑并发的情况下用Vector(保证线程的安全)

  在不考虑并发的情况下使用ArrayList(不能保证线程的安全)

       并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,

且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

List集合中的常用方法为:

  void add(int index, Object element) :添加对象element到位置index上
  boolean addAll(int index, Collection collection) :在index位置后添加容器collection中所有的元素
  Object get(int index) :取出下标为index的位置的元素
  int indexOf(Object element) :查找对象element 在List中第一次出现的位置
  int lastIndexOf(Object element) :查找对象element 在List中最后出现的位置
  Object remove(int index) :删除index位置上的元素 
  ListIterator listIterator(int startIndex) :返回一个ListIterator 跌代器,开始位置为startIndex 
  List subList(int fromIndex, int toIndex) :返回一个子列表List ,元素存放为从 fromIndex 到toIndex之前的一个元素

以上是关于List集合的主要内容,如果未能解决你的问题,请参考以下文章

一个list集合数据拷贝到另一个集合中

list集合

Kotlin集合操作总结 ( List 集合 | MutableList 集合 | List 集合遍历 | Set 集合 | MutableSet 集合 | Map 集合 | 可变 Map集合 )

Kotlin集合操作总结 ( List 集合 | MutableList 集合 | List 集合遍历 | Set 集合 | MutableSet 集合 | Map 集合 | 可变 Map集合 )

java list 集合里可以存放list集合 吗?就是两重 List

JAVA怎么取多个List集合的交集?