java--集合-Map

java--集合-Map

一、什麼是Map

 

  • 映射關係,也有人稱爲字典,Map集合裏存在兩組值,一組是key,一組是value。Map裏的key不允許重複。通過key總能找到唯一的value與之對應。

 

  1. Map裏的key集存儲方式和對應的Set集合中的元素存儲方式一致;
  2. 學生都有一個學號,我們能點學號就能找到某個學生,好比這個學號就是key,學生就是value。

 

 

  • Map.Entry是Map接口的內部接口,專門用來保存key-value內容:

二、Map常用方法

 

  1. void clear():刪除該Map對象中所有的key-value對。也就是清理該集合;
  2. boolean containsKey(Object key):查詢Map中是否包含指定的key;
  3. boolean containsValue(Object  value):查詢Map中是否包含至少一個value;
  4. Set entrySet():返回Map所包含的key-value對所組成的Set集合,每個集合元素都是Map.Entry對象(Entry是Map內部類);
  5. Object get(Object key):返回指定key所對應的value,若此Map中不包含該key,返回null;
  6. boolean isEmpty():判斷Map集合是否爲空;
  7. Set keySet():返回該Map中所有key所組成的Set集合;
  8. Object put(Object key,Object value):添加一個key-value對,若Map中已有與key相等的key-value對,則新的key-value對覆蓋原來的key-value對;
  9. void putAll(Map m):將m中的key-value賦值到調用該方法的Map對象中;
  10. Object remove(Object key):刪除指定key所對應的key-value對,返回本刪除key所關聯的value,若key不存在,返回null;
  11. int size():返回該Map裏面key-value對的個數;
  12. Collection values():返回Map裏所有value組成的Collection。

 

三、Map.Entry

 

  • Entry是Map接口裏面的一個內部接口.
  • 該接口用於封裝key- value,有3個方法:

 

 

 

 

  1. Object getKey();返回Entry裏包含的key值
  2. Object getValue();返回Entry裏包含的value值
  3. Object setValue(Object value):設置Entry裏包含的value值,並返回新設置的value值;

 

 

 

 

四、Map集合的輸出

 

  • 按照最正統的做法,所有的Map集合的內容都要依靠Iterator輸出,以上雖然是完成了輸出,但是完成的不標準,Map集合本身並不能直接爲Iterator實例化,如果此時非要使用Iterator輸出Map集合中內容的話,則要採用如下的步驟:

 

 

 

 

方法一:

 

 

 

 

1.通過entrySet方法變成Set對象

 

 

 

 

2.調用Set的Iterator方法,此時每個Iterator對象是Map.Entry對象

 

 

 

 

3.對Map.Entry分離出 key - value

 

 

 

 

方法二:

 

 

 

 

1.通過keySet得到Map集合多有key的Set集合

 

 

 

 

2.調用Set的Iterator方法,此時每個Iterator對象是key值

 

 

 

 

 

3.通過Map的getValue(key)得到value值

 

 

 

 

 

五、Map集合常用類

 

  • HashMap:線程不安全,速度快,允許存放null鍵,null值。類中的key都屬於無序存放的

 

 

 

 

 

 

  1. 即使HashMap線程不安全,在多線程中也推薦使用
  2. Collections類: public static  Map synchronizedMap(Map m)來返回線程同步的映射;
  3. HashMap裏的key存儲和保存HashSet裏面的元素一致,若自定義類作爲HashMap或Hashtable的key:當兩個key對象的equals方法返回true時,兩個key對象的hashCode值也應一樣;

 

 

 

 

 

 

 

  • TreeMap:對key進行排序,排序原理與TreeSet相同。

HashMap實例

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


public class MapDemo {
	public static void main(String[] args) {
		
		Map map = new  HashMap();
		/**
		 * Map裏的key必須唯一,不然後續的會覆蓋前面的
		 * 
		 *	Entry是Map的內部接口: 表示一組映射關係
		 *
		 *	Map裏key不記錄順序,  和 Set一樣;
		 *	
		 * 
		 */
		map.put("1", "A");
		map.put("1", "C");
		map.put("2", "B");
		map.put("3", "C");
		map.put(null, null);
		
		System.out.println(map);
		/**
		 * boolean containsKey(Object key) 如果此映射包含指定鍵的映射關係,則返回 true。
		 * boolean containsValue(Object value)  如果此映射將一個或多個鍵映射到指定值,則返回 true。  
		 */
		
		System.out.println(map.containsKey("3"));
		System.out.println(map.containsKey("33"));
		System.out.println(map.containsValue("E"));
		System.out.println(map.containsValue("C"));
		
		/*
		 *  Object get(Object key) 返回指定鍵所映射的值;如果此映射不包含該鍵的映射關係,則返回 null。 
		 * */
		
		Object v = map.get("3");
		System.out.println(v);
		
		/*
		 * void putAll(Map m) 
          			從指定映射中將所有映射關係複製到此映射中(可選操作)。  
		 * */
		
		Map map2 = new HashMap();
		map2.put("A", "春哥");
		map2.put("C", "著姐");
		
		map.putAll(map2);
		
		System.out.println(map);
		
		/*
		 *  Object remove(Object key)  如果存在一個鍵的映射關係,則將其從此映射中移除(可選操作)。 
		 * */
		
		 v = map.remove("A");
		 System.out.println(v);
		 System.out.println(map);
		 /**
		  * int size()  多少組映射關係(Entry)
		  */
		 System.out.println(map.size());
		
		 /*
		  * Set entrySet() 返回此映射中包含的映射關係的 Set 視圖。 
		  * */
		 
		 Set entrys = map.entrySet();
		 
		 for (Object o : entrys) {
			
			 if(o instanceof Map.Entry){
				 Map.Entry entry  = ( Map.Entry) o;
				 
				 /*
				  *  Object getKey()   返回與此項對應的鍵。 
				 	 Object getValue()  返回與此項對應的值。 
				 	 Object setValue(V value) 用指定的值替換與此項對應的值(可選操作)。 

				  * */
				 System.out.println("entry.key-->"+entry.getKey());
				 System.out.println("entry.value-->"+entry.getValue());
				 System.out.println("entry.setvalue-->"+entry.setValue("Will"));
				 System.out.println("entry.value-->"+entry.getValue());
			 }
		}
		 System.out.println(map);
		 
		 /*
		  * Set keySet()    返回此映射中包含的鍵的 Set 視圖。 
		  * */
		 
		Set keys =  map.keySet();
		for (Object key : keys) {
			System.out.println("key-->" + key);
			System.out.println("value-->" + map.get(key));
		}
		
		
		/*
		 * Collection<V> values()  返回此映射中包含的值的 Collection 視圖。 
		 * */
		
		Collection vs = map.values();
		for (Object val : vs) {
			System.out.println("value===  " + val);
		}
		
		//==========================================
		//Can only iterate over an array or an instance of java.lang.Iterable
		/*for(Object obj : map){
			
		}*/
	}
}

 

六、TreeMap

 

 

  • HashMap子類中的key都屬於無序存放的,如果現在希望有序(按key排序)則可以使用TreeMap類完成,但是需要注意的是,由於此類需要按照key進行排序,而且key本身也是對象,那麼對象所在的類就必須實現Comparable接口。
  • 使用  HashMap的時候 key和 value都可以保存爲  nulll;
  • 當 使用 TreeMap 的時候  key不能爲null,value可以是 null;
  • TreeMap對key的排序方式:

 

 

 

 

 

 

 

  1. 自然排序;
  2. 定製排序;

 

 

 

 

 

 

 

  • TreeMap判斷兩個key元素是否相等標準(和HashSet一樣):

 

 

 

 

 

 

 

 

  1. compareTo方法或compare方法返回0;

 

 

 

 

 

 

 

 

TreeMap實例

import java.util.Comparator;
import java.util.HashMap;
import java.util.TreeMap;

class A implements Comparable{

	public int compareTo(Object o) {
		return 0;
	}
	
}
public class TreeMapDemo {
	public static void main(String[] args) {
		
		TreeMap m  = new TreeMap();
		
		m.put("3", "3");
		m.put("7", "7");
		m.put("-9", "-9");
		m.put("A", "A");
		
		System.out.println(m);
		/**
		 * Map.Entry ceilingEntry(K key) 
          			返回一個鍵-值映射關係,它與大於等於給定鍵的最小鍵關聯;如果不存在這樣的鍵,則返回 null。 
		 */
		
		System.out.println(m.ceilingEntry("4"));
		
		/**
		 * Map.Entry firstEntry() 
          		返回一個與此映射中的最小鍵關聯的鍵-值映射關係;如果映射爲空,則返回 null。 
		 */
		
		System.out.println(m.firstEntry());
		
		m = new TreeMap();
		//m.put("A", new A());
		//m.put("A", new A());
		
		m.put(new A(), "A");
		m.put(new A(), "A");
		m.put(new A(), "A");
		m.put(new A(), "A");
		/*
		 * 使用  HashMap的時候 key和 value都可以保存爲  nulll;
			當 使用 TreeMap 的時候  key不能爲null,value可以是 null;
				對象要調用 compreTo方法比較,
		 * */
		m.put(null,null);
		System.out.println(m);
		
		//Map裏 key的定製排序
		m = new TreeMap(new Comparator() {
			public int compare(Object o1, Object o2) {
				return 0;
			}
		});
		
		/**
		 * 	HashSet    HashMap
		 * 	TreeSet	   TreeMap
		 * 
		 * 
		 * 其實 Set和Map在底層有莫大的關係:
		 * 	可以這樣理解:
		 * 		HashMap裏的key其實就是HashSet元素;
		 * 			
		 * 		public HashSet() {
        			map = new HashMap<>();
    			}
		 */
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章