首页 > 编程语言 > 详细

JAVA学习第三十四课(常用对象API)- 集合框架(二)—List集合及其子类特点

时间:2014-10-19 01:23:07      阅读:320      评论:0      收藏:0      [点我收藏+]

整个集合框架中最常用的就是List(列表)和Set(集)


一、List集合 && Set的特点

Collection的子接口:

1、List:有序(存入和取出的顺序一致),元素都有索引且可以重复

   API文档解释:有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

2、Set:元素不能重复,无序,有可能会有序

   API文档解释:一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。

....

根据问题需要使用对应的容器


二、List常见方法

因为是Collection的子类,只演示其特有方法

1.添加
	void add(index,element)
	void add(index,Collection)
2.删除
	Object remove(index)
3.修改
	Object set(index,element)
4.获取
	Object get(index)
	int indexOf(Object)
	int lastIndexOf(Object)
	List subList(from,to)//含头,不含尾


代码演示

import java.util.ArrayList;
import java.util.List;

public class Main 
{
	public static void main(String[] args) 
	{
		List list = new ArrayList();//注意LIst的包不要导入错误,java.awt中也有个List
		show(list);
	}
	public static void show(List list)
	{
		//添加
		list.add("a1");
		list.add("a2");
		list.add("a3");
		System.out.println("List = "+list);
		
		//添加元素
		//list.add(2,"a250");
		
		//删除元素
		//list.remove(2);
		
		//修改(Collection不具备修改)
		//list.set(2, "a25");
		
		//获取
		//list.get(1);
		//System.out.println("list = "+list.get(1));
		
		//获取子列表
		List LL = list.subList(0, 2);//含头,不含尾
		System.out.println("ZI List = "+LL);
		
	}
}

由上可见,List的特有的常见方法有一个共性就是都可以操作角标->增删改查


三、ListIterator接口:List特有

   API文档解释:系列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。

ListIterator迭代器,是为了处理迭代器迭代和集合操作出现并发修改时,出现的异常问题


import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class Main 
{
	public static void main(String[] args) 
	{
		List list = new ArrayList();
		//show(list);
		ListIteratorDemo(list);
	}
	public static void ListIteratorDemo(List list)
	{
		list.add("a1");
		list.add("a2");
		list.add("a3");
		
		//Iterator it = list.iterator();//此时的it只知道当前状态的list的内部数据结构的存储方式
		//所以下述代码会抛出异常,因为后来list结构变化了,it不知道
		/*while(it.hasNext()) {
			Object object = it.next();
			if (object.equals("a2")) {
				list.add("a250");//ConcurrentModificationException
				//此异常的原因是:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
			}
			else {
				System.out.println(object);
			}
		}*/
		
		//解决:迭代和集合同时访问造成了并发,所以集合操作的时候不迭代,迭代的时候不使用集合操作
		System.out.println("Old List :"+list);
		ListIterator iterator = list.listIterator();
		//list特有迭代器,可以实现在迭代过程中完成对元素的增删改查
		/*listIterator(int index) 
          返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。*/
		while (iterator.hasNext()) {
			Object object = iterator.next();
			if(object.equals("a2")){
				iterator.add("a250");//注意此处就不用list,而是使用的迭代器,避免并发
			}
		}
		System.out.println("New List:"+list);
		//System.out.println("hasNext? "+iterator.hasNext());
		//System.out.println("hasPrevious? "+iterator.hasPrevious());
		while(iterator.hasPrevious())
		{
			System.out.println(iterator.previous());
		}
	}
}

四、List常用子类特点


1.Vector:内部是数组结构,且同步,增删慢,查询慢

    API文档解释:Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。

2.ArrayList:内部是数组结构,不同步替代了Vector,查询速度快

   API文档解释:List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于 Vector 类,除了此类是不同步的。)

3.LinkedList:内部是链式存储结构,不同步,增删速度快

   API文档解释:List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。


JAVA学习第三十四课(常用对象API)- 集合框架(二)—List集合及其子类特点

原文:http://blog.csdn.net/wjw0130/article/details/40250671

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!