1. 程式人生 > >JAVA學習篇14——map集合

JAVA學習篇14——map集合

Map:     java體系中非常重要的資料結構之一     以鍵值對的形式進行儲存元素     底層實現方法:陣列+連結串列   Map介面     實現:HashMap    HashTable   TreeMap  LinkedHashMap Map核心API:         put()  putAll()   size()   get()   keySet()  ContainsKey()   ContainsValue()           values()  isEmpty()  remove()  clear()  entrySet()  equals()          HashMap:

儲存結構是無序             key和value可以為null             key相同的情況下,後面入棧的value值會覆蓋前面的value值             hashCode,hash碼int型     建立Entry物件             HashMap實現自定義同步:Collections.synchronizedMap()    

package com.ss.day16;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class MapDemo {

	public static void main(String[] args) {
		apiMethod();
	}

	public static void apiMethod() {
		/*
		 * put() 新增元素 size() 獲取map集合大小 get() 獲取map集合裡面key所對應的value值
		 * map集合集合key和value可以為null
		 */
		// 例項化一個人Map物件 先用泛型指定key和vaule的型別
		Map<String, String> map = new HashMap<String, String>();
		// put()新增元素
		map.put("抓八戒", "高老莊");
		map.put("孫悟空", "花果山");
		map.put("唐僧", "大唐");
		map.put("蜘蛛精", "盤絲洞");
		map.put("蜘蛛精", "盤絲洞1");
		map.put(null, null);
		System.out.println(map.size());
		System.out.println(map.get("蜘蛛精"));
		System.out.println(map.isEmpty() ? "map物件null" : "map物件不為null");
		System.out.println("判斷map集合是否包含'抓八戒'的key值:" + map.containsKey("抓八戒"));
		System.out.println("判斷map集合是否包含'高老莊'的value值:" + map.containsValue("高老莊"));
		// System.out.println("根據key值刪除對應的Entry物件:"+map.remove("唐僧"));
		System.out.println(map.size());

		Map<String, String> map1 = new HashMap<String, String>();
		map1.put("沙僧", "流沙河");
		map1.put("小白龍", "龍宮");
		map.putAll(map1);
		System.out.println(map.size());// 7
		System.out.println(map.get("小白龍"));
		// clear()會全部刪除資料
		// map.clear();
		// System.out.println(map.size());// 7
		System.out.println("集合遍歷1-----------------------------------------");
		// 呼叫keySet方法遍歷輸出map集合的key
		for (String key : map.keySet()) {
			System.out.println(key + "------" + map.get(key));
		}
		System.out.println("集合遍歷2-----------------------------------------");

		// 用Iterator物件方式遍歷map的key值
		for (Iterator<String> its = map.keySet().iterator(); its.hasNext();) {
			String key = its.next();
			System.out.println(key + "+++++++++++++" + map.get(key));
		}
		System.out.println("集合遍歷3-----------------------------------------");

		Collection<String> cls = map.values();
		Iterator<String> values = cls.iterator();
		while (values.hasNext()) {
			System.out.println("map的value值:" + values.next());
		}
		System.out.println("集合遍歷4-----------------------------------------");
		// Map.entry<Integer,String> 對映項(鍵-值對) 有幾個方法:用上面的名字entry
		// entry.getKey() ;entry.getValue(); entry.setValue();
		// map.entrySet() 返回此對映中包含的對映關係的 Set檢視。
		Set<Entry<String, String>> entrySet = map.entrySet();
		for (Entry<String, String> entry : entrySet) {
			System.out.println(entry.getKey() + "-------------" + entry.getValue());
		}
	}

}
import java.util.HashMap;
import java.util.Map;

public class MapDemo1 {

	/*
	 * == 和 equals的區別:
	 */
	public static void main(String[] args) {
		new Object();
		objMenthod();
		String str = new String("abc");
		String str1 = new String("abc");
		Class<? extends String> class1 = str.getClass();
		Class<? extends String> class2 = str1.getClass();
		System.out.println(class1+"++++++++++++++");
		System.out.println(class2);
		System.out.println(str == str1);
		System.out.println(str.equals(str1));
		
		System.out.println(str.hashCode());
		System.out.println(str1.hashCode());
		//System.out.println(a1.hashCode());
		//hashcode相等情況下   equals不一定相等  
		//equals相等情況下  hashcode值一定相等
		//如果判斷兩個物件的資料是否相等的情況   需要重寫hashCode和equals方法
	}

	public static void objMenthod() {
		Object object = new Object();
		String string = new String("abc");
		String string1 = new String("abc");
		System.out.println(string.equals(string1));
		System.out.println(string == string1);
		Employee employee = new Employee("武松", 28);
		Employee employee1 = new Employee("武松", 28);
		System.out.println(employee.equals(employee1));
		// ctrl+shift+o 快速導包
		Map<Employee, String> objMap = new HashMap<Employee, String>();
		objMap.put(new Employee("武松", 28), "景陽崗");
		objMap.put(new Employee("武松1", 28), "景陽崗");
		objMap.put(new Employee("武大郎", 28), "街上");
		System.out.println(objMap.size());// 3
		for (Employee emp : objMap.keySet()) {
			System.out.println(emp + "---" + objMap.get(emp));
		}
	}
}

        HashTable:儲存結構是無序             key和value不可以為null             key相同的情況下,後面入棧的value值會覆蓋前面的value值             支援同步處理、查詢效率相對HashMap低                  TreeMap:         實現了自然順序的排序         TreeMap裡面的Key值排序         預設是升序         TreeMap的key值為為自定義物件的時候,實現Comparator   compare()                                 實現Comparable  comparTo()在方法裡面定義排序規則                                      LinkedHashMap:         是有順序的結構的,先進先出  繼承HashMap  使用雙向連結串列機制類實現資料的順序