当前位置: 主页 > JAVA语言

java list定义和使用-python定义一个list

发布时间:2023-03-31 09:11   浏览次数:次   作者:佚名

List

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

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

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

ArrayList实现Cloneable,得到了clone()方法java list定义和使用,可以实现克隆功能;

ArrayList实现Serializablejava list定义和使用,表示可以被序列化,通过序列化去传输,典型的应用就是hessian协议。

136be34314a57ba454d97dfa8ef5d707.png

Java List的常用操作

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

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

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

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

136be34314a57ba454d97dfa8ef5d707.png

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

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

136be34314a57ba454d97dfa8ef5d707.png

去重复;

136be34314a57ba454d97dfa8ef5d707.png

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

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

136be34314a57ba454d97dfa8ef5d707.png

List的子类

1、LinkedList类

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

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

136be34314a57ba454d97dfa8ef5d707.png

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刚创建后是空栈。

136be34314a57ba454d97dfa8ef5d707.png