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("==================结束==================="); } }
相关文章推荐
- 阅读{django-restframework}源码[generics.py]学习笔记
- Java框架类源码阅读学习笔记
- Halide学习笔记----Halide tutorial源码阅读14
- Redux 学习笔记 - 源码阅读
- Halide学习笔记----Halide tutorial源码阅读21
- JDK 1.7源码阅读笔记(五)集合类之Collection
- Halide学习笔记----Halide tutorial源码阅读6
- Halide学习笔记----Halide tutorial源码阅读16
- Halide学习笔记----Halide tutorial源码阅读10
- Redux 学习笔记 - 源码阅读
- java String 源码阅读笔记以及Unicode的学习
- Halide学习笔记----Halide tutorial源码阅读4
- api.js源码阅读学习笔记
- Java Collection Framework 源码阅读笔记
- 如何阅读Vuejs源码、学习笔记
- Halide学习笔记----Halide tutorial源码阅读2
- Halide学习笔记----Halide tutorial源码阅读3
- Redux 学习笔记 - 源码阅读
- Redux 学习笔记 - 源码阅读
- Halide学习笔记----Halide tutorial源码阅读19