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("==================结束===================");

	}

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老陈头7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值