码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-05-28 23:17:16      阅读:469      评论:0      收藏:0      [点我收藏+]

标签:

本文主要讲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的实例

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

四、性能排名榜

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

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

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

技术分享

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

标签:

原文地址:http://blog.csdn.net/zhaolijing2012/article/details/46128885

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!