java集合總結


1:集合體系
	集合
		|--Collection(單列)
			|--List(有序,可重複)
				|--ArrayList
					底層數據結構是數組,查詢快,增刪慢。
					線程不安全,效率高。
				|--Vector
					底層數據結構是數組,查詢快,增刪慢。
					線程安全,效率低。
				|--LinkedList	
					底層數據結構是鏈表,查詢慢,增刪快。
					線程不安全,效率高。
			|--Set(無序,唯一)
				|--HashSet
					底層數據結構是哈希表。
					線程不安全,效率高。

					怎麼保證唯一性的呢?
					它依賴兩個方法:hashCode()和equals()
					順序:
						首先判斷hashCode()值是否相同。
						同:繼續走equals(),看返回值
							如果true:就不添加到集合。
							如果false:就添加到集合。
						不同:就添加到集合。
				|--TreeSet
					底層數據結構是二叉樹。
					線程不安全,效率高。

					怎麼保證唯一性的呢?是根據返回是否是0。
					怎麼保證排序的呢?兩種方式
						自然排序(元素具備比較性)
							實現Comparable接口
						比較器排序(集合具備比較性)
							實現Comparator接口
		|--Map(雙列 底層結構是針對鍵有效,跟值無關)
			|--HashMap
				底層數據結構是哈希表。
				線程不安全,效率高。

				怎麼保證唯一性的呢?
				它依賴兩個方法:hashCode()和equals()
				順序:
					首先判斷hashCode()值是否相同。
					同:繼續走equals(),看返回值
						如果true:就不添加到集合。
						如果false:就添加到集合。
					不同:就添加到集合。
			|--Hashtable
				底層數據結構是哈希表。
				線程安全,效率低。

				怎麼保證唯一性的呢?
				它依賴兩個方法:hashCode()和equals()
				順序:
					首先判斷hashCode()值是否相同。
					同:繼續走equals(),看返回值
						如果true:就不添加到集合。
						如果false:就添加到集合。
					不同:就添加到集合。
			|--TreeMap
				底層數據結構是二叉樹。
				線程不安全,效率高。

				怎麼保證唯一性的呢?是根據返回是否是0。
				怎麼保證排序的呢?兩種方式
					自然排序(元素具備比較性)
						實現Comparable接口
					比較器排序(集合具備比較性)
						實現Comparator接口

2:應用。(添加功能,判斷功能,刪除功能,獲取功能,長度功能)
	Collection 
		add(Object obj)
		remove(Object obj)
		contains(Object obj)
		iterator()
		size()
		
		|--List
			get(int index)
			add(int index,Object obj)
			remove(int index)
			set(int index,Object obj)
		|--Set

	Map
		put(Object key,Object value)
		remove(Object key)
		containsKey(Object key)
		containsValue(Object value)
		size()
		get(Object key)
		keySet()
		values()

3:遍歷方式
	List:
		迭代器(在源碼中可以看到的,開發中也經常看到)
		增強for(開發中看到,JDK5以後用)
		普通for

		如果僅僅爲了遍歷,用任意一種即可。一般選擇前兩種的任意一種。
		如果要做修改,或者刪除指定位置的元素,或者在指定位置添加元素。用普通for。
	Set:
		迭代器
		增強for

		任選一種。
	Map:
		鍵找值。

4:代碼補齊:請對array,hs,hm進行遍歷。
	A:
		ArrayList<String> array = new ArrayList<String>();

		方式1:
		Iterator<String> it = array.iterator();
		while(it.hasNext()){
			String s = it.next();
			System.out.println(s);
		}

		方式2:
		for(String s : array){
			System.out.println(s);
		}

		方式3:
		for(int x=0; x<array.size(); x++){
			String s = array.get(x);
			System.out.println(s);
		}

	B:
		HashSet<String> hs = new HashSet<String>();
	
		方式1:
		Iterator<String> it = hs.iterator();
		while(it.hasNext()){
			String s = it.next();
			System.out.println(s);
		}

		方式2:
		for(String s : hs)
		{
			System.out.println(s);
		}

	C:
		HashMap<String,Strting> hm = new HashMap<String,String>();	

		Set<String> set = hm.keySet();
		for(String key : set)
		{
			String value = hm.get(key);
			System.out.println(key+"***"+value);
		}

5:什麼時候用誰?
	是否鍵值對?
		是:Map
			是否對鍵排序?
				是:TreeMap
				否:HashMap
			不懂的情況下,使用HashMap。

		否:Collection
			是否唯一
				是:Set
					是否對元素進行排序?
						是:TreeSet
						否:HashSet
					不懂的情況下,使用HashSet
				否:List
					是否要安全:
						是:Vector(真正開發中也不用)
							List list = Collections.synchronizedList(new ArrayList());

						否:ArrayList,LinkedList
							查詢多:ArrayList
							增刪多:LinkedList
					不懂的情況下,使用ArrayList


發佈了23 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章