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