您的位置:首页 > 编程语言 > Java开发

Java三大集合类源码阅读笔记【包含超类Collection】提供学习源码

2017-06-13 11:10 471 查看


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 接口在 iterator、add、remove、equals 和hashCode 方法的协定上加了一些其他约定,超过了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.
4000
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("==================结束===================");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: