Java集合Map(四)
****************************Map**********************************
Map
Hashtable HashMap 1.鍵值對 2.沒有叠代順序 SortedMap
Properties LinkedHashMap 帶有叠代順序的HashMap NavigableMap
TreeMap
********************************HashMap***************************************
一.什麽是Map
字典 鍵值對 一一對應的關系
key value
放的時候 放一組鍵值對,放入到map以後 可以通過key來查找value
需求: 根據學科查詢該學科的考試成績
演示代碼:
package com.chapter12.map;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* 公司:藍橋軟件學院
* 作者:zhangzy
* 時間:2017年7月19日 上午9:24:43
* 功能:演示HashMap 字典 鍵值對 一一對應的關系
*/
public class TestHashMap {
public static void main(String[] args) {
//需求: 根據學科查成績
Map<String,Integer> map = new HashMap<String,Integer>();
Integer i = map.put("java", 100);
map.put("數據結構", 90);
map.put("操作系統", 80);
//返回值: 如果添加進去的時候 map中沒有所添加的key 返回null
//如果之前已經有了相同的key 返回這個key所對應的之前的value值
/*Integer score = map.put("操作系統", 85);//key不變 value覆蓋
Integer osScore = map.get("操作系統");
System.out.println(osScore);*/
//遍歷map
Set<String> keySet = map.keySet();
for(String key:keySet){
System.out.println(key + "=" + map.get(key));
}
}
}
********************************LinkedHashMap***************************************
帶有叠代順序的HashMap
****************************需求:根據DVD查詢影評***********************************
package com.chapter12.map;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import com.chapter12.DVD;
/**
* 公司:藍橋軟件學院
* 作者:zhangzy
* 時間:2017年7月19日 上午10:00:54
* 功能:根據電影 查詢影評
*/
public class TestHashMapDVD {
public static void main(String[] args) {
Map<DVD,String> map = new HashMap<DVD,String>();
DVD dvd1 = new DVD(1,"歸來",80);
DVD dvd2 = new DVD(2,"超凡蜘蛛俠2",50);
DVD dvd3 = new DVD(3,"我的播音系女友",40);
DVD dvd4 = new DVD(4,"X戰警",30);
DVD dvd5 = new DVD(5,"歸來",80);
//Set 使用hashCode()和equals()去重 如果它倆都相同 是意義上同一個對象 第2個會被去掉
//HashMap 使用hashCode()和equals()判斷是否是同一個key 如果hashCode()和equals()都相同 是同一個key
//key 不變 value覆蓋
map.put(dvd1, "好看1");
map.put(dvd2, "好看2");
map.put(dvd3, "好看3");
map.put(dvd4, "好看4");
map.put(dvd5, "好看11111111111111");
Set<DVD> keySet = map.keySet();
/*for(DVD key:keySet){
System.out.println(key + "=" + map.get(key));
}*/
//查詢: 歸來的影評
DVD dvd = new DVD(10,"歸來",80);
String yingping = map.get(dvd);
System.out.println(yingping);
}
}
****************************Hashtable和HashMap的區別**********************************
***Hashtable 早期的API JDK1.0 就已經有了
1. Hashtable 是線程安全版本的HashMap
2. Hashtable 的key 和value都不允許為null
HashMap 可以由一個null 的key 和 多個null的value
演示代碼:
package com.chapter12;
import java.util.HashMap;
import java.util.Map;
public class TestHashtable {
public static void main(String[] args) {
Map<String,String> map = new HashMap<String,String>();
map.put(null, "aaa");
map.put(null, "bbb");
map.put("aaa", null);
map.put("bbb", null);
}
}
********************************TreeMap***************************************
可以排序的Map,按照key排序
TreeMap如何判斷是同一個key,使用compareTo()進行判斷,如果compareTo()為0,認為是同一個key
第二個key 不變 value覆蓋
HashMap 和 HashSet
TreeMap 和 TreeSet
********************************HashSet的實質***************************************
底層就是HashMap
Set<DVD> set = new HashSet<DVD>();
set.add(dvd1);
map.put(dvd1,obj);
public class HashSet<Object>{
private static final Object obj = new Object();
Map<DVD,Object> map = new HashMap<DVD,Object>();
public boolean add(Object e) {
return map.put(e, PRESENT)==null;
}
}
*****************************************泛型*******************************************
定義類的時候:類型的形參
方法的形參、實際
Set<String> set = new HashSet<String>();//<String> 實參
泛型比Object好處: Object雖然可以添加任何類型,但是不太安全,添加進去以後,會向上轉型成Object,
取出來的時候需要向下轉型,向下轉型不安全,可能發生ClassCastException,而且還比較麻煩...
為了保證程序的健壯性和易用性,出現了泛型...
Java集合Map(四)