集合框架(中)

/*
Collection
	|--List:元素是有序的,元素能够重复。由于该集合体系有索引。
		|--ArrayList:底层的数据结构使用的是数组结构。特色:查询速度很快。可是增删稍慢。线程不一样步。
		|--LinkedList:底层使用的链表数据结构。特色:增删速度很快,查询稍慢。线程不一样步。
		|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。由于效率低。


	|--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方法获取。

*/


import java.util.*;
class ListDemo 
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
	public static void method()
	{
		
		ArrayList al = new ArrayList();

		//添加元素
		al.add("java01");
		al.add("java02");
		al.add("java03");
		
		sop("原集合是:"+al);
		//在指定位置添加元素。
		al.add(1,"java09");

		//删除指定位置的元素。
		//al.remove(2);

		//修改元素。
		//al.set(2,"java007");

		//经过角标获取元素。
		sop("get(1):"+al.get(1));

		sop(al);

		//获取全部元素。
		for(int x=0; x<al.size(); x++)
		{
			System.out.println("al("+x+")="+al.get(x));
		}

		Iterator it = al.iterator();

		while(it.hasNext())
		{
			sop("next:"+it.next());
		}


		//经过indexOf获取对象的位置。
		sop("index="+al.indexOf("java02"));

		List sub = al.subList(1,3);

		sop("sub="+sub);
	}

	
	public static void main(String[] args) 
	{

		//演示列表迭代器。
		ArrayList al = new ArrayList();

		//添加元素
		al.add("java01");
		al.add("java02");
		al.add("java03");

		sop(al);

		
		ListIterator li = al.listIterator();

		
		//sop("hasPrevious():"+li.hasPrevious());

		while(li.hasNext())
		{
			Object obj = li.next();

			if(obj.equals("java02"))
				//li.add("java009");
				li.set("java006");


		}

		while(li.hasPrevious())
		{
			sop("pre::"+li.previous());
		}
		//sop("hasNext():"+li.hasNext());
		//sop("hasPrevious():"+li.hasPrevious());


		sop(al);



		/*
		//在迭代过程当中,准备添加或者删除元素。

		Iterator it = al.iterator();

		while(it.hasNext())
		{
			Object obj = it.next();

			if(obj.equals("java02"))
				//al.add("java008");
				it.remove();//将java02的引用从集合中删除了。

			sop("obj="+obj);


		}
		sop(al);
		*/
		

	}
}

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

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

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


在JDK1.6出现了替代方法。

offerFirst();
offerLast();


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

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

*/

class LinkedListDemo 
{
	public static void main(String[] args) 
	{
		LinkedList link = new LinkedList();

		link.addLast("java01");
		link.addLast("java02");
		link.addLast("java03");
		link.addLast("java04");

		//sop(link);
//		sop(link.getFirst());
//		sop(link.getFirst());
		//sop(link.getLast());
		//sop(link.removeFirst());
		//sop(link.removeFirst());

		//sop("size="+link.size());

		while(!link.isEmpty())
		{
			sop(link.removeLast());
		}

	}

	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}


/*
使用LinkedList模拟一个堆栈或者队列数据结构。

堆栈:先进后出  如同一个杯子。
队列:先进先出 First in First out  FIFO 如同一个水管。

*/

import java.util.*;
class DuiLie extends LinkedList
{
	public LinkedList link;

	DuiLie()
	{
		link =new LinkedList();
	}

	public  void myAdd(Object obj)
	{
		link.offerFirst(obj);
	}

	public  Object myGet()
	{
		return	link.pollLast();
	}

	public  boolean isNull()
	{
		return link.isEmpty();
	}
}

class DuiZhan extends DuiLie
{
	
	DuiZhan()
	{
		super();
	}
	public  void myAdd(Object obj)
	{
		link.offerLast(obj);
	}
}
class LinkedListTest 
{
	public static void main(String[] args) 
	{
		DuiLie dl =new DuiLie();
		dl.myAdd("beijing");
		dl.myAdd("nanjing");
		dl.myAdd("dongjing");

		
		
		
		DuiLie dz =new DuiZhan();
		/*dz.myAdd("na");
		dz.myAdd("ran");
		dz.myAdd("li");*/
		
		dz=dl;//疑惑:用赋值的这种方式调用的结果和独立定义结果为什么不一样呢?
		sop("dz:"+dz.myGet());
		

		for (Iterator it =dz.iterator();it.hasNext() ; )
		{
			sop(it.next());
		}

		while(!dl.isNull())
		{
			sop(dl.myGet());
		}

		
	}

	public static void sop(Object obj)
	{
		
		System.out.println(obj);
	}
}
相关文章
相关标签/搜索