对Java 中List的理解

本文详细介绍了Java中List接口及其实现类ArrayList和LinkedList的特点与使用方法,包括底层数据结构、常用操作及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在在实际开发工作中经常用到各种集合类数据,有必要好好总结下


1.基本知识点

  (1)形式上为一个集合接口,因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法 。

只要是集合类接口都会有个“迭代子”( Iterator ),利用这个迭代子,就可以对list内存的一组对象进行操作。 所有要想操作这个list内存的东西,就首先要得到此迭代子的实例:Iterator it=l.iterator(); 用add()方法即可添加新的成员对象,他可以添加的仅仅只能为对象,不能添加基本数据类型;容器还对应get(),remove()方法来获取和删除数据成员;

   (2)最大特点: 有序、可重复

   (3)常用实现类有ArrayList和LinkedList


              ArrayList:底层数据结构的实现方式采用的是数组结构,其特点是查询快,增删较慢,线程不同步;

              LinkedList:底层数据结构的实现是链表结构,其特点是查询较慢,增删较快
              Vector:底层是数组数据结构 线程同步(无论查询还是增删都很慢,被ArrayList替代了)

注意:

   需要快速插入,删除元素,应该使用LinkedList;
   需要快速随机访问元素,应该使用ArrayList;

   对于“单线程环境” 或者 “多线程环境,但List仅仅只会被单个线程操作”,此时应该使用非同步的类(如ArrayList);
   对于“多线程环境,且List可能同时被多个线程操作”,此时,应该使用同步的类(如Vector);

2. 常用方法和功能

(1)实现方式:

List<String> list1 = new ArrayList<String>();
List<String> list2 = new LinkedList<String>();
(2)常用方法:

add(int index, Object obj)方法和set(int index, Object obj)方法,前者是向指定索引位置添加对象,而后者是修改指定索引位置的对象

list1.add(0, "JAVA");
list1.add(1, "C++");
list1.add(2, "C");
list1.add(3, "Phython");
list1.set(3, "改过了");
(3)遍历方式有三种:
a.用迭代器Iterator ,在大量数据情况,用迭代器遍历是最快的(也可以用List集合特有的迭代器:ListIterator(是Iterator的子接口) )

Iterator<String> it = list1.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}

注意:
在迭代时,是不可以通过集合对象的方法操作集合中的元素
因为会发生ConcurrentModificationException异常(并发异常)
所以,在迭代器时,只能用迭代器的方法操作元素
因为Iterator方法是有限的所以只能对元素进行判断,取出,删除的操作
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator
该接口只能通过List集合的listIterator方法获取

ListIterator<String> it2 = list2.listIterator();
		while (it2.hasNext()) {
		if (it2.next().equals("C++")) {
it2.add("新加一个");
//it2.set("修改你");
			}
		}

b.

for (String data : list1) {
			System.out.println(data);
		}

c.

for (int i = 0; i < list1.size(); i++) {
			System.err.println(list1.get(i));
		}
(4)LinkedList特有方法:  

addFirst();在头部添加元素 addLast();在尾部添加元素

getFirst(); getLast(); 获取元素但不删除元素。如果集合中没有元素,会出现NoSuchElementException

removeFirst(); removeLast(); 获取元素但是删除元素。如果集合中没有元素,会出现NoSuchElementException

在JDK1.6出现了替代方法

offerFirst(); offerLast();

peekFirst(); peekLast(); 获取元素,但是元素不被删除。如果集合中没有元素,会返回null

pollFirst(); pollLast(); 获取元素,但是元素被删除。如果集合中没有元素,会返回null




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值