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

来源:互联网 发布:淘宝买腾讯会员靠谱吗 编辑:程序博客网 时间:2024/06/05 14:21


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_22835System.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));//trueSystem.out.println(collection2.containsAll(collection));//true是否全部包含?:2是否全部包括1里的对象System.out.println("=========add、remove==========");collection2.add("Y1");System.out.println(collection2.size()-collection.size());//1System.out.println("=========equals、containsAll========2==");System.out.println(collection.equals(collection2));//falseSystem.out.println(collection2.containsAll(collection));//trueSystem.out.println(collection.containsAll(collection2));//falsecollection2.remove("a1");//能删除System.out.println(collection2.size()-collection.size());System.out.println("=========equals、containsAll========3==");System.out.println(collection.equals(collection2));//falseSystem.out.println(collection2.containsAll(collection));//falsecollection2.remove("g1");//不能删除System.out.println(collection2.size()-collection.size());System.out.println("=========equals、containsAll========4==");System.out.println(collection.equals(collection2));//falseSystem.out.println(collection2.containsAll(collection));//falseSystem.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());/*falsetrue[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"));//4System.out.println(myList.indexOf("Hu"));//-1System.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"));//5System.out.println(myList.indexOf("Hu"));System.out.println(myList.indexOf("c2"));//6System.out.println(myList.lastIndexOf("c2"));//7System.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());//falseSystem.out.println(listIterator.hasNext());//trueString first = listIterator.next();System.out.println(first);System.out.println(listIterator.hasPrevious());//trueSystem.out.println(listIterator.hasNext());//trueString 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);//b1listIterator.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);//a2listIterator.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());//falseSystem.out.println(listIterator.hasNext());//trueSystem.out.println(listIterator.next());listIterator = myList2.listIterator(30);//指个超量的/* Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 30 */System.out.println("==================结束===================");}}





阅读全文
0 0
原创粉丝点击