您的位置 首页 java

简析Java List的常规用法

List

Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中。List集合是有序的,Developer可对其中每个元素的插入位置进行精确地控制,可以通过索引来访问元素,遍历元素。在List集合中,我们常用到ArrayList和LinkedList这两个类。其中,ArrayList底层通过数组实现,随着元素的增加而动态扩容。而LinkedList底层通过链表来实现,随着元素的增加不断向链表的后端增加节点。ArrayList是Java集合框架中使用最多的一个类,是一个数组队列, 线程 不安全集合。它继承于AbstractList,实现了List, RandomAccess, Cloneable, Serializable接口

  1. ArrayList实现List,得到了List集合框架基础功能;

  2. ArrayList实现RandomAccess,获得了快速随机访问存储元素的功能,RandomAccess是一个标记接口,没有任何方法;

  3. ArrayList实现Cloneable,得到了clone()方法,可以实现克隆功能;

  4. ArrayList实现Serializable,表示可以被 序列化 ,通过序列化去传输,典型的应用就是hessian协议。

Java List的常用操作

  • list中添加,获取,删除元素;

添加方法是:.add(e);  

获取方法是:.get(index);  

删除方法是:.remove(index); 按照 索引 删除;  .remove(Object o); 按照元素内容删除;

  • 利用list中索引位置重新生成一个新的list(截取集合);

方法: .subList(fromIndex, toIndex);  .size() ; 该方法得到list中的元素数的和

  • 去重复;

  • list中根据索引将元素数值改变;

注意 .set(index, element); 和 .add(index, element); 的不同;

List的子类

1、LinkedList类

  • LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在 LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。

  • 注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:

2、ArrayList类

  • ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。

  • size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。

  • 每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并 没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。

  • 和LinkedList一样,ArrayList也是非同步的(unsynchronized)。

  • 特点是:寻址容易,插入和删除困难;

3、 Vector

  • Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的 Iterator ,虽然和ArrayList创建的 Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例 如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该 异常。

4、Stack 类

  • Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得 Vector得以被当作堆栈使用。基本的push和pop 方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。

文章来源:智云一二三科技

文章标题:简析Java List的常规用法

文章地址:https://www.zhihuclub.com/196719.shtml

关于作者: 智云科技

热门文章

网站地图