1. 程式人生 > >Java集合Map(四)

Java集合Map(四)

... 底層 args str prop navig 學院 作者 tex

****************************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(四)