一大波Java来袭(八)——Java集合之List接口

本文详细阐述了List接口及其实现类,包括ArrayList、Vector和LinkedList的特点、区别以及性能对比。重点介绍了List接口与父接口Collection的区别,以及ListIterator接口的使用方法。同时,对比了ArrayList和Vector的相同点和不同点,指出ArrayList的线程不安全性及性能优势,并介绍了如何优化数据结构以提升性能。

本文主要讲Collection接口之一List接口及其实现类。

          List集合,特点:有序,可重复


与上文中Set不同的是,List集合是有序的,这种顺序表现在:通过索引的形式,记录了元素的添加顺序。

List接口的实现类,如图所示:

1. ArrayList 与数组有关吗?          

2.Vector

3.LinkedList

          上文研究Set集合的时候,了解到LinkedHashSet是通过链表的形式将hash算法存储的元素链接起来,这里是不是将:带有索引的List集合也通过链表的形式,连接起来呢?

          从图中看出,实现了deque接口,猜测应该会实现双向队列的效果把。


待我慢慢道来.......

一、List接口和ListIterator接口

List接口的特点在于通过“索引”记录了元素的添加顺序。因此相比较起父接口Collection而言,添加了一些根据索引操作集合元素的方法。

额外添加了专门操作List的方法:listIterator()

listIterator与Iterator对比listIterator增加了向前迭代的功能(Iterator只能向后迭代),增加了通过add方法向List集合中添加元素(Iterator只能删除元素)

public class TestlistIterator {

	public static void main(String[] args) {
		String[] books = {"englishbook","computerbook","musicbook"};
		List bookList = new ArrayList();
		for (int i = 0; i < books.length; i++) {
			bookList.add(books[i]);
		}
		ListIterator bookListIterator = bookList.listIterator();
		while(bookListIterator.hasNext()){
			System.out.println("book正向迭代:"+bookListIterator.next());
			bookListIterator.add("---------分隔符--------------");
		}
		System.out.println("-------下面开始反向迭代----------------");
		while(bookListIterator.hasPrevious()){
			System.out.println("book反向迭代:"+bookListIterator.previous());
		}
	}

}

结果如下:


二、ArrayList和Vector实现类

1. 相同点:

          都是基于数组实现的List类,所以封装了一个动态再分配的Object[]数组。通过属性capacity表示长度,且会自动增长。

         若添加大量元素,可使用ensureCapacity一次性添加capacity。甚至是直接指定capacity的大小,从而减少重新分配的次数,提高性能。

2. 不同点:

         简单理解为新的ArrayList替代旧的Vector的功能。

         ArrayList是线程不安全,Vector线程安全(性能较高,但不建议使用)

         Stack是Vector的子类,模拟“栈”数据结构,LIFO。

LinkedList基于链表实现List类,优化顺序访问,特别是:插入、删除,速度非常快。(同时实现Deque接口,双向队列)

三、固定长度的List

         操作数据的工具类Arrays.asList(.....)将数组转化为List集合【此时为Arrays内部类ArrayList的实例

         注意:此时长度已经固定了!不可改变

四、性能排名榜

各容器性能对比,主要取决于集合的底层实现,是:数组/链表

插入、删除、迭代时:数组 < 链表。

随机访问:数组 > 链表。(数组,连续内存区)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值