Java三大集合類源碼閱讀筆記【包含超類Collection】提供學習源碼


Map是集合類型,在<key,value>鍵值對存數據。Key不能重複;一個Key只能映射到一個value


JDKAPI原文:Map 接口提供三種collection 視圖,允許以鍵集、值集或鍵-值映射關係集的形式查看某個映射的內容。

白話文:對Map取值有keySet()、values()、entrySet(),三個方法,get(key)是取其中某個值。


兩個批量方法:putAll(Map<K,V> map)、clear()

兩個修改方法:put(K,V)、remove(K)

五個查詢方法:get(K)、size()、isEmpty()、containsKey(K)、containsValue(V)

一個展現子類:Map.Entry() --> interface Entry<K,V>

equals(o)、hashCode



Set也是集合類型,是一個不包含重複元素的 collection。

方法與下面的Collection接口一模一樣,這裏不囉嗦。


Collection 表示一組對象.

查詢方法:size()、isEmpty()、contains(O)、toArray()、  <T> T[] toArray( T[] )  + iterator()

修改方法:add(E)、remove(E)

批量方法:containsAll(Collection)、addAll(Collection )、removeAll(Collection)、retainAll(Collection)、clear()

對比和哈希:equals(o)、hashCode


所有已知子接口: BeanContext,BeanContextServices,BlockingDeque<E>,BlockingQueue<E>,Deque<E>,List<E>,NavigableSet<E>,Queue<E>,Set<E>,SortedSet<E> 


List接口,自Collection接口而來,是有序的 collection(也稱爲序列)。可以對列表中每個元素的插入位置進行精確地控制

List 接口在 iteratoraddremoveequalshashCode 方法的協定上加了一些其他約定,超過了Collection 接口中指定的約定

首先,除了Collection接口中原有的iterator,List接口多增加了ListIterator接口(當然還是繼承的Iterator),把原先只有next的單鏈結構,擴展了成有previous和next元素的雙鏈結構,多提供了hasPrevious()、previous()、previousIndex()、nextIndex()方向操作方法。在可選方法上(初學者可以不管),除了原來的remove()方法,又增加了add(E)、set(E)方法,用於插入元素和替換元素。

其次,看看List接口的add、remove方法,多提供了index參數

最後,新提供方法subList(fromIndex,toIndex)、indexOf(O)找元素位置、get(index)



package collection;

import java.util.Calendar;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class LearnMap {

	public static void main(String[] args) {
		Map<Integer, String> huluwa = new HashMap<Integer, String>();
		
		huluwa.put(1, "大娃");
		huluwa.put(2, "二娃");
		huluwa.put(3, "三娃");
		huluwa.put(4, "四娃");
		huluwa.put(5, "五娃");
		huluwa.put(6, "六娃");
		huluwa.put(7, "七娃");
		
//		     https://yq.aliyun.com/articles/96654?utm_campaign=wenzhang&utm_medium=article&utm_source=QQ-qun&201769&utm_content=m_22835
		System.out.println("遍歷方法1————.size()");
		long start = Calendar.getInstance().getTimeInMillis();
		for (int i = 0, n = huluwa.size(); i < n; i++) {
			System.out.println(huluwa.get(i+1));
		}
		System.out.println("耗時:"+(Calendar.getInstance().getTimeInMillis()-start));
		
		System.out.println("遍歷方法2————.entrySet()     foreach");
		start = Calendar.getInstance().getTimeInMillis();
		Set<Entry<Integer, String>> entrySet = huluwa.entrySet();
//		Iterator<Entry<Integer, String>> entryIterator = entrySet.iterator();
//		while (entryIterator.hasNext()) {
		for (Entry<Integer, String> entry : entrySet) {
			//Entry<Integer, String> entry = entryIterator.next();
			System.out.println(entry.getKey()+":"+entry.getValue());
		}
		System.out.println("耗時:"+(Calendar.getInstance().getTimeInMillis()-start));
		
		System.out.println("遍歷方法3————.keySet()");
		start = Calendar.getInstance().getTimeInMillis();
		Set<Integer> keySet = huluwa.keySet();
//		Iterator<Integer> keyIterator = keySet.iterator();
//		while (keyIterator.hasNext()) {
		for (Integer integer : keySet) {
			System.out.println(huluwa.get(integer));
		}
		System.out.println("耗時:"+(Calendar.getInstance().getTimeInMillis()-start));
		
		
		System.out.println("遍歷方法4————.values()");
		start = Calendar.getInstance().getTimeInMillis();
		Collection<String> values = huluwa.values();
		for (String string : values) {
			System.out.println(string);
		}
		System.out.println("耗時:"+(Calendar.getInstance().getTimeInMillis()-start));
		
		
//		Integer[] a = {7,6,5,4,3,2,1};
//		Integer[] a = {8,6,5,4,3,2,1,0};
		Integer[] a = {8,6,5,4};
		System.out.println("遍歷方法5————.keySet().toArray()"+huluwa.size());
		start = Calendar.getInstance().getTimeInMillis();
		Object[] b = huluwa.keySet().toArray(new Object[huluwa.size()-2]);
		for (int i = 0; i < b.length; i++) {
			System.out.println("b:"+b[i]);
		}
//		for (int i = 0; i < a.length; i++) {
//			System.out.println("a:"+a[i]);
//		}
		System.out.println("耗時:"+(Calendar.getInstance().getTimeInMillis()-start));
		
		System.out.println("遍歷方法6————.entrySet().toArray()");
		start = Calendar.getInstance().getTimeInMillis();
		for (Object object : huluwa.entrySet().toArray()) {
			Entry<Integer,String> entry = (Entry<Integer,String>)object;
			System.out.println(object);
			System.out.println(entry.getKey()+"||"+entry.getValue());
		}
		System.out.println("耗時:"+(Calendar.getInstance().getTimeInMillis()-start));
	}

}
package collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class LearnCollection {

	public static void main(String[] args) {
		
		Collection<String> collection = new ArrayList<String>();
		collection.add("a1");
		collection.add("b1");
		collection.add("c1");
		collection.add("a2");
		collection.add("b2");
		collection.add("c2");
		
		System.out.println(collection.size()+"======"+collection.toString());
		collection.add("c2");	//collection可以存重複數據
		System.out.println(collection.size()+"======"+collection.toString());
		collection.remove("c2");	//只刪除1個數據
		//collection.removeAll("c2");	//有誤,啊哈哈
		System.out.println(collection.size()+"======"+collection.toString());
		
		System.out.println("===================開始==================="+collection.hashCode());
		
		System.out.println(collection.size());
		System.out.println(collection.isEmpty());
		
		Object[] objects = collection.toArray();
		for (int i = 0; i < objects.length; i++) {
			System.out.println("toArray["+i+"]="+objects[i]);
		}
		
		Object[] object12 = collection.toArray(new Object[12]);	//返回固定長度數組
		for (int i = 0; i < object12.length; i++) {
			System.out.println("Array12["+i+"]="+object12[i]);
		}
		
		for (Iterator<String> iterator = collection.iterator(); iterator.hasNext();) {
			String obj = iterator.next();
			System.out.println("Iterator="+obj);
		}
		
		//*********************************************************************************
		System.out.println("===================Collection1驗證===================");
		System.out.println(collection.contains("a2"));
		System.out.println(collection.contains("a4"));
		
		
		
		System.out.println("===================Collection2批量操作===================");
		Collection<String> collection2 = new ArrayList<String>();

		System.out.println("=========addAll==========");
		collection2.addAll(collection);
		System.out.println("=========equals、containsAll========1==");
		System.out.println(collection.equals(collection2));			//true
		System.out.println(collection2.containsAll(collection));	//true	是否全部包含?:2是否全部包括1裏的對象
		
		System.out.println("=========add、remove==========");
		collection2.add("Y1");
		System.out.println(collection2.size()-collection.size());	//1
		System.out.println("=========equals、containsAll========2==");
		System.out.println(collection.equals(collection2));			//false
		System.out.println(collection2.containsAll(collection));	//true
		System.out.println(collection.containsAll(collection2));	//false
		collection2.remove("a1");	//能刪除
		System.out.println(collection2.size()-collection.size());
		System.out.println("=========equals、containsAll========3==");
		System.out.println(collection.equals(collection2));			//false
		System.out.println(collection2.containsAll(collection));	//false
		collection2.remove("g1");	//不能刪除
		System.out.println(collection2.size()-collection.size());
		System.out.println("=========equals、containsAll========4==");
		System.out.println(collection.equals(collection2));			//false
		System.out.println(collection2.containsAll(collection));	//false
		
		System.out.println("=========retainAll======2裏僅保留1裏“所含有”的元素====");
		collection2.retainAll(collection);
		System.out.println(collection2.size()+"======"+collection2.toString());
		
		System.out.println("=========removeAll==========");
		collection2.removeAll(collection);
		System.out.println(collection2.size()+"======"+collection2.toString());
		
		System.out.println("=========add、remove==========");
		collection2.containsAll(collection);

		
		//*********************************************************************************
		
		collection.clear();
		System.out.println("===================清空後再來一次==================="+collection.hashCode());
		
		System.out.println(collection.size());
		System.out.println(collection.isEmpty());
		
		objects = collection.toArray();
		for (int i = 0; i < objects.length; i++) {
			System.out.println("toArray["+i+"]="+objects[i]);
		}
		
		object12 = collection.toArray(new Object[12]);
		for (int i = 0; i < object12.length; i++) {
			System.out.println("Array12["+i+"]="+object12[i]);
		}
		
		for (Iterator<String> iterator = collection.iterator(); iterator.hasNext();) {
			String obj = iterator.next();
			System.out.println("Iterator="+obj);
		}
		
		
		System.out.println("==================結束===================");
		System.out.println(collection.equals(collection2));
		
	}

}

package collection;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class LearnList {

	public static void main(String[] args) {

		List<String> myList = new ArrayList<String>();
		myList.add("a1");
		myList.add("b1");
		myList.add("c1");
		myList.add("a2");
		myList.add("b2");
		myList.add("c2");
		myList.add("c2");
		
		List<String> myList2 = new ArrayList<String>();
		myList2.add("a1");
		myList2.add("b1");
		myList2.add("c1");
		myList2.add("a2");
		myList2.add("b2");
		myList2.add("c2");
//		myList2.add("吧");

		System.out.println("==================開始===================");
		System.out.println(myList.toString());
		System.out.println(myList2.toString());
		
		System.out.println(myList.hashCode());
		System.out.println(myList2.hashCode());
		
		System.out.println(myList.equals(myList2));
		System.out.println(myList.containsAll(myList2));
		
		System.out.println("==================retainAll===只保留指定List裏的數據,其它的元素都刪掉================");
		System.out.println(myList.retainAll(myList2));
		System.out.println(myList2.retainAll(myList));
		System.out.println(myList.toString());
		System.out.println(myList2.toString());
		/*
			false
			true
			[a1, b1, c1, a2, b2, c2, c2]
			[a1, b1, c1, a2, b2, c2]
		 */
		
		System.out.println(myList.get(1));
		System.out.println(myList.indexOf("b2"));	//4
		System.out.println(myList.indexOf("Hu"));	//-1
		System.out.println(myList.hashCode());
		myList.add(0, "Hu");
		System.out.println(myList.toString());
		System.out.println(myList.get(1));
		System.out.println(myList.indexOf("b2"));	//5
		System.out.println(myList.indexOf("Hu"));
		System.out.println(myList.indexOf("c2"));	//6
		System.out.println(myList.lastIndexOf("c2"));//7
		System.out.println(myList.hashCode());
		
		System.out.println(myList.toString());
		System.out.println(myList.remove("c2"));
		System.out.println(myList.toString());
		System.out.println(myList.remove(3));
		System.out.println(myList.toString());
		
		List<String> a = myList.subList(3, 4);
		System.out.println(a.toString());
		
		System.out.println("==================ListIterator===================");
		for (Iterator<String> iterator = myList.iterator(); iterator.hasNext();) {
			System.out.println(iterator.next());
		}
		ListIterator<String> listIterator = myList.listIterator();
		System.out.println(listIterator.toString());
		System.out.println(listIterator.hasPrevious());	//false
		System.out.println(listIterator.hasNext());	//true
		
		String first = listIterator.next();
		System.out.println(first);
		System.out.println(listIterator.hasPrevious());	//true
		System.out.println(listIterator.hasNext());	//true
		
		String second = listIterator.next();
		System.out.println(second);
		System.out.println(myList.toString());	//[Hu, a1, b1, a2, b2, c2]
		listIterator.add("haha");
		System.out.println(myList.toString());	//[Hu, a1, haha, b1, a2, b2, c2]
		//listIterator.remove();				//Exception in thread "main" java.lang.IllegalStateException
								/*
								 * 既沒有調用 next 也沒有調用 previous,或者在最後一次調用 next 或 previous 後調用了 remove 或 add。
								 * 挪到了third之後試試
								 */
		//System.out.println(myList.toString());	
		
		String third = listIterator.next();
		System.out.println(third);				//b1
		listIterator.remove();
		System.out.println(myList.toString());	//[Hu, a1, haha, a2, b2, c2]
		
		//listIterator.set("張天");		//Exception in thread "main" java.lang.IllegalStateException
								/*
								 * 既沒有調用 next 也沒有調用 previous,或者在最後一次調用 next 或 previous 後調用了 remove 或 add。
								 */
		String forth = listIterator.next();
		System.out.println(forth);		//a2
		listIterator.set("張天");
		System.out.println(myList.toString());	//[Hu, a1, haha, 張天, b2, c2]
		
		
		System.out.println(myList2.toString());
		listIterator = myList2.listIterator(3);	//返回listIterator,並指定“指針”位置在List第3元素之前,調next()即返回第3元素,preivous()則返回第2元素
		System.out.println(listIterator.hasPrevious());	//false
		System.out.println(listIterator.hasNext());	//true
		System.out.println(listIterator.next());
		
		listIterator = myList2.listIterator(30);	//指個超量的
					/*
					 Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 30
					 */
		System.out.println("==================結束===================");

	}

}





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