java--List

Collection

|--List:元素是有序的,元素可以重复。因为该集合体系有索引。
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。初始容量为 10 的空列表,每次增加50%
|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。初始容量为 10 的空列表,每次增加100%
|--Set:元素是无序,元素不可以重复。、

List:
特有方法。凡是可以操作角标的方法都是该体系特有的方法。

add(index,element);
addAll(index,Collection);

remove(index);

set(index,element);

get(index):
subList(from,to);
listIterator();
int indexOf(obj):获取指定元素的位置。
ListIterator listIterator();

List集合特有的迭代器。ListIterator是Iterator的子接口。

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

该接口只能通过List集合的listIterator方法获取。

java的Iterator和listIterator的区别  
我们在使用List,Set的时候,为了实现对其数据的遍历,我们经常使用到了Iterator(迭代器)。使用迭代器,你不需要干涉其遍历的过程,只需要每次取出一个你想要的数据进行处理就可以了。但是在使用的时候也是有不同的。List和Set都有iterator()来取得其迭代器。对List来说,你也可以通过listIterator()取得其迭代器,两种迭代器在有些时候是不能通用的,Iterator和ListIterator主要区别在以下方面:
1. ListIterator有add()方法,可以向List中添加对象,而Iterator不能
2. ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。
3. ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。
4. 都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。
因为ListIterator的这些功能,可以实现对LinkedList等List数据结构的操作。其实,数组对象也可以用迭代器来实现。

import java.util.*;
class Test 
{
	public static void main(String[] args) 
	{
		ArrayList a=new ArrayList();

		a.add("java 01");
		a.add("java 02");
		a.add("java 03");
		a.add("java 04");
		sop(a+"\n"+"a.szie="+a.size());
		ListIterator li = a.listIterator();
		while(li.hasNext())
		{
			Object obj = li.next();
			if(obj.equals("java 02"))
				li.set("java 006");
		}
		sop(a+"\n"+"a.szie="+a.size());
		while(li.hasPrevious())
		{
			sop(li.previous());
		}
	}
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}
结果是:
[java 01, java 02, java 03, java 04]
a.szie=4
[java 01, java 006, java 03, java 04]
a.szie=4
java 04
java 03
java 006
java 01


Vector:

枚举就是Vector特有的取出方式。
发现枚举和迭代器很像。
其实枚举和迭代是一样的。

因为枚举的名称以及方法的名称都过长。
所以被迭代器取代了。
枚举郁郁而终了。

import java.util.*;
class VectorDemo 
{
	public static void main(String[] args) 
	{
		Vector v = new Vector();

		v.add("java01");
		v.add("java02");
		v.add("java03");
		v.add("java04");

		Enumeration en = v.elements();
		while(en.hasMoreElements())
		{
			System.out.println(en.nextElement());
		}
	}
}

LinkedList:

LinkedList:特有方法:
addFirst();
addLast();

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

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

在JDK1.6出现了替代方法。
offerFirst();在此列表的开头插入指定的元素。
offerLast();在此列表末尾插入指定的元素。
peekFirst();获取但不移除此列表的第一个元素;如果此列表为空,则返回 null。
peekLast();获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null。 
pollFirst();获取并移除此列表的第一个元素;如果此列表为空,则返回 null。
pollLast();获取并移除此列表的最后一个元素;如果此列表为空,则返回 null。 

import java.util.*;
class Test 
{
	public static void main(String[] args) 
	{
		LinkedList l=new LinkedList();
		l.addFirst("java 001");
		l.addFirst("java 002");
		l.addFirst("java 003");
		l.addFirst("java 004");
		sop(l+"\n"+"l.szie="+l.size());
		sop("getFirst="+l.getFirst());
		sop(l+"\n"+"l.szie="+l.size());
		while(!l.isEmpty())
		{
			sop(l.removeLast());
		}
	}
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}
结果:

[java 004, java 003, java 002, java 001]
l.szie=4
getFirst=java 004
[java 004, java 003, java 002, java 001]
l.szie=4
java 001
java 002
java 003
java 004

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值