Java集合總結

一、Java集合框架結構圖:

 

 

 

 

 

 

 

 

 

 

 

 

 

Collection,List,Set都是接口。

Collection是集合裏最基本的接口,它裏面定義了一個集合最基本功能,如元素的添加,移除,集合大小等的方法。它有兩個子類List和Set。

List:有序的,允許元素重複(因爲有索引)。

Set:無序(存入和取出的順序不一定一致),不允許元素重複。

迭代器:

迭代器就是用於把集合裏的元素一個一個的取出的東西。

在Collection接口裏就定義了iterator()方法,用於獲取一個迭代器。獲取的該迭代器只有三個方法hasNext(),next(),remove()。List接口裏也定義了一個特殊的迭代器ListIterator(),它包含了一些特殊的方法(不僅能取出元素,同時還能對List增刪改查)

————————————————————————————————————————————————————————

二、List:ArrayList,LinkedList,Vector 

1)ArrayList:

   它的底層數據結構是數組,線程不同步。查詢速度很快,但若有很多元素,增刪元素會比較慢,因爲增刪一個元素,其他元素都得移動一個索引。(牽一髮而動全身)

2)LinkedList:

   它的底層數據結構是鏈表,所以查詢很慢,但增刪很快。

3)Vector:

   它和ArrayList的數據結構都是數組,但它是線程同步的。

只要理解了他們幾個底層的數據結構,那麼就好理解他們各自的優點和缺點等特點了。

三、Set:HashSet,TreeSet:

1)HashSet:

    它的數據結構是哈希表,線程是非同步的。

2)TreeSet:

   它的數據結構是二叉樹, 不同於HashSet的是他會自動爲元素自然排序。

 

附別人的博客總結筆記:點擊打開鏈接 點擊打開鏈接

四、幾個練習:

1)練習一:去除某ArrayList集合中重複的元素。

package Test528;

import java.util.*;

/**
 * 功能:去除某ArrayList集合中重複的元素。
 * 定義函數 singleEmement(ArrayList al)。
 * 原理:把原來集合裏的元素通過迭代器取出來,並放入一個新的集合容器裏。同時每次放入的時候
 * 判斷新容器裏是否已經含有該元素,若有,則不放入。
 * @author Administrator
 *
 */
public class ArrayListTest {


	public static void main(String[] args) {
		
		ArrayList al = new ArrayList();
		al.add("A");
		al.add("B");
		al.add("B");
		al.add("B");
		al.add("F");
		al.add("C");
		al.add("C");
		
		System.out.println(al);
		
		ArrayList newAl = singleEmement(al);
		
		System.out.println(newAl);
		
		
	}
	
	//定義實現該功能的函數
	public  static ArrayList singleEmement(ArrayList al)
	{
		
		ArrayList newAl = new ArrayList<String>(); 
		Iterator it = al.iterator();
		while(it.hasNext())
		{
			Object obj = it.next();
			if(!newAl.contains(obj))
			{
				newAl.add(obj);
			}
		}

		return newAl;
		
	}

}

2)練習二:使用LinkedList模擬一個堆棧數據結構。

package Test531;
import java.util.LinkedList;
/**
 * 使用LinkedList模擬一個隊列數據結構(先進先出)
 * @author Administrator
 *
 */
public class MyQueue {
	
	private LinkedList link; 
	//通過構造函數,只要有類就新建LinkedList對象。
	MyQueue()
	{
		link = new LinkedList();	
	}
	//自定義MyQueue裏的myAdd()方法,其實是封裝了link裏方法。
	public void myAdd(Object obj)
	{
		link.add(obj);
	}
	//自定義myGet()方法,其實是封裝了link的getFirst()方法。
	public Object myGet()
	{
		return link.getFirst();
	}
	
	public boolean myIsEmp()
	{
		return link.isEmpty();
	}
}
package Test531;

public class MyDuiLieTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		MyQueue dl = new MyQueue();
		dl.myAdd("wang1");
		dl.myAdd("wang2");
		dl.myAdd("wang3");
		dl.myAdd("wang4");
		System.out.println(dl.myIsEmp());
		System.out.println(dl.myGet());

	}

}

其實編碼本身沒什麼難度,關鍵是通過封裝別人的方法,來自定義自己的方法這種思想要深刻理解。


 

 

 

 

 

 

 

 

 

 

 

 

 

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