集合框架(中)

/*
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);
	}
}
相關文章
相關標籤/搜索