黑馬程序員------集合框架(No.2)(ArrayList、LinkedList、vector)

---------------------- ASP.Net+Android+IO開發S.Net培訓、期待與您交流! ---------------------- 

微笑List集合對象的特點:

 

List:

 |----List:元素是有序的,元素可以重複。因爲該集合體繫有索引。

           |----ArrayList:底層的數據結構使用的是數組結構。特點:查詢速度很快,但是增、刪稍慢(涉及下標的改變)。線程不同步。

           |----LinkedList:底層使用的鏈表數據結構。特點:增刪的速度很快,查詢的速度稍慢。

           |----vector:底層是數組數據結構。出現的早,在集合框架出現之前。無論增刪還是查詢都慢,被ArrayList淘汰,線程同步。

 

有關Vector的程序

import java.util.*;
/*
枚舉就是Vector特有的取出方式。

枚舉和迭代器很像
枚舉和迭代是一樣的。
因爲枚舉的名稱和方法的名稱都過長,所以被迭代器取代了,枚舉就沉默了。
*/
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();

 

獲取元素,但不刪除元素,如果集合中沒有元素,會出現NoSuchElementException
getFirst();
getLast();

 

獲取元素,但刪除元素。如果集合中沒有元素,會出現NoSuchElementException
removeFirst();
removeLast();

 

在JDK1.6出現了替代方法


添加元素
offerFirst();
offerLast();

 

獲取元素,但不刪除元素。如果集合中沒有元素,會返回null;
peekFirst();
peekLast();

 

獲取元素,但是會刪除元素。如果集合中沒有元素,會返回null。
pollFirst();
pollLast();

class LinkedListDemo{
	public static void main(String[] args){
		LinkedList link = new LinkedList();
		link.addFirst("java01");
		link.addFirst("java02");
		link.addFirst("java03");
		link.addFirst("java04");
		link.addFirst("java00");
		link.addLast("java05");
		link.offerFirst("java007");
		sop(link);
		sop(link.removeFirst());
		//遍歷
		while(!link.isEmpty()){
			sop(link.removeFirst());
		}
	}
	public static void sop(Object obj){
		System.out.println(obj);
	}
}


使用LinkedList模擬一個堆棧或者隊列數據結構。

 

堆棧:先進後出,如同水杯。

隊列:先進先出,如同水管。First in First out  ----  FIFO。

import java.util.*;
class Duilie{
	private  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 DuilieDemo{
	public static void main(String[] args){
		Duilie d = new Duilie();
		d.myAdd("java00");
		d.myAdd("java01");
		d.myAdd("java02");
		d.myAdd("java03");
		while(!d.isNull()){
			System.out.println(d.myGet());
		}
	}
}

將自定義對象作爲元素存到ArrayList集合中,並去除重複元素。
 

import java.util.*;
/*
將自定義對象作爲元素存到ArrayList集合中,並去除重複元素。
比如:存人對象。同名同年齡,視爲同一個人。爲重複元素

思路:
1.對人描述
2.定義容器,將人存入。
3.取出
*/
class Person{
	private String name;
	private int age;
	Person(String name,int age){
		this.name = name;
		this.age = age;
	}
	public String getName(){
		return name;
	}
	public int getAge(){
		return age;
	}
	public String toString(){
		return "("+name+":"+age+")";
	}
	//重寫equals方法是因爲ArrayList的contains方法的底層是由equals方法實現的。
	public boolean equals(Object obj){
		if(!(obj instanceof Person))
			return false;
		Person p = (Person)obj;
		return this.name.equals(p.name)&&this.age==p.age;
	}
}
class ArrayListDemo{
	public static void sop(Object obj){
		System.out.println(obj);
	}
	//實現ArrayList元素的過濾。
	public static ArrayList singleElement(ArrayList list){
		ArrayList newList = new ArrayList();
		Iterator it = list.iterator();
		while(it.hasNext()){
			Person p = (Person)it.next();
			if(!newList.contains(p)){
				newList.add(p);
			}
		}
		return newList;
	}
	public static void main(String[] args){
		ArrayList a = new ArrayList();
		//添加對象
		a.add(new Person("zhangsan",10));
		a.add(new Person("lisi",14));
		a.add(new Person("zhangsan",10));
		a.add(new Person("zhaoliu",12));
		a.add(new Person("lisi",14));
		a.add(new Person("lisi",14));
		sop(a);
		sop(singleElement(a));
		}
}


---------------------- ASP.Net+Android+IOS開發.Net培訓、期待與您交流! ---------------------- 

詳情請查看:http://edu.csdn.net

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章