更新时间:2020-07-09 16:11:50 来源:极悦 浏览2348次
Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中。List集合是有序的,Developer可对其中每个元素的插入位置进行精确地控制,可以通过索引来访问元素,遍历元素。在List集合中,我们常用到ArrayList和LinkedList这两个类。其中,ArrayList底层通过数组实现,随着元素的增加而动态扩容。而LinkedList底层通过链表来实现,随着元素的增加不断向链表的后端增加节点。ArrayList是Java集合框架中使用最多的一个类,是一个数组队列,线程不安全集合。它继承于AbstractList,实现了List,RandomAccess,Cloneable,Serializable接口。
ArrayList实现List,得到了List集合框架基础功能;
ArrayList实现RandomAccess,获得了快速随机访问存储元素的功能,RandomAccess是一个标记接口,没有任何方法;
ArrayList实现Cloneable,得到了clone()方法,可以实现克隆功能;
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培训机构的小编针对“Java编程基础中list的用法”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习