天天看點

黑馬程式員——Map集合概述和特點

------<a href="http://www.itheima.com" target="_blank" rel="external nofollow"  target="blank">Java教育訓練、Android教育訓練、iOS教育訓練、.Net教育訓練</a>、期待與您交流! -------
           

Map集合概述和特點

Collection集合---Set  List   它們都是單列集合

Map----------它是一個雙列集合 它在存儲時,是以key-value方式存儲

Map集合是一個雙列集合,它是以key-value鍵值對的方式存儲,它的key值是唯一的。

Map是一個接口,它與Collection無關系,它們可以了解成并列。

Map集合的功能概述

我們學習Map主要學習其下兩個實作類  HashMap   TreeMap

Map集合的基本功能測試

package cn.itcast.map;

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

//介紹Map中提供功能
//1.添加操作  put
// public Object put(Object key,Object value)
// 參數: key   value  要存儲的鍵值對
// 傳回值:如果為null,代表key不重複,key-value存儲了,如果不為null,代表key重複了,傳回的是被替換元素。

//2.删除
// public void clear();
//public Object remove(Object key)
//作用:根據key解出  映射關系  傳回的就是value值。

//3.得到集合的長度
//public int size();

//4.判斷操作
// public boolean isEmpty()
//public boolean containsKey(Object key)  //判斷是否包含指定的key值
//public boolean containsValue(Object value) //判斷是否包含指定的value值

public class MapDemo2 {

	public static void main(String[] args) {
           //輸入你要測試的方法。
	}

	// 1.存儲 put
	public static void putTest() {
		Map<String, Integer> map = new HashMap<String, Integer>();
		System.out.println(map.put("張三", 10));
		map.put("李四", 20);
		map.put("王五", 30);
		System.out.println(map.put("張三", 100));
		System.out.println(map);
	}

	// 2.删除
	public static void clearTest() {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("李四", 20);
		map.put("王五", 30);

		map.clear();// 清空map

		System.out.println(map);
	}

	// 3.remove
	public static void removeTest() {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("李四", 20);
		map.put("王五", 30);

		System.out.println(map.remove("李四"));

		System.out.println(map);
	}

	// 4.判斷
	public static void checkTest() {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("李四", 20);
		map.put("王五", 30);

		// 判斷是否為空
		System.out.println(map.isEmpty());
		//判斷是否包含指定的key
		System.out.println(map.containsKey("李四"));
		//判斷是否包含指定的value
		System.out.println(map.containsValue(20));

		System.out.println(map);
	}
}

           

Map集合擷取功能測試

package cn.itcast.map;

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

//Map集合擷取功能測試
//1.get
//2.keySet
//3.values
public class MapDemo3 {

	public static void main(String[] args) {
		<pre name="code" class="java"> //輸入你要測試的方法。
           

}// 1.getpublic static void getTest() {Map<String, String> map = new HashMap<String, String>();map.put("one", "aaa");map.put("two", "bbb");map.put("3", "ccc");String v1 = map.get("one1");System.out.println(v1);String v3 = map.get(3);System.out.println(v3);}// 2.keySetpublic static void keySetTest() {Map<String, String> map = new HashMap<String, String>();map.put("one", "aaa");map.put("two", "bbb");map.put("3", "ccc");Set<String> set = map.keySet();System.out.println(set);}// 3. valuespublic static void valuesTest() {Map<String, String> map = new HashMap<String, String>();map.put("one", "aaa");map.put("two", "bbb");map.put("3", "ccc");Collection<String> c = map.values();System.out.println(c);}}

Map集合的周遊之鍵找值

package cn.itcast.map;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
//Map集合的周遊之鍵找值
//分析:
//1.使用Map.keySet方法得到所有的Set(所有的key)
//2.周遊Set,就得到了每一個Key,在根據map.get(key),擷取key對應的value.

public class MapDemo4 {

	public static void main(String[] args) {
		//1.定義Map集合,裝入資料
		Map<String, String> map = new HashMap<String, String>();
		map.put("one", "aaa");
		map.put("two", "bbb");
		map.put("3", "ccc");
		//2.得到所有的key
		Set<String> keys=map.keySet();
		
		//3.周遊keys這個Set集合,就得到了Map集合中所有的key
		for(String key:keys){
			//4.根據key擷取對應的value.
			System.out.println("key:"+key+"  value:"+map.get(key));
		}
	}
}
           

Map集合的周遊之鍵值對對象找鍵和值

package cn.itcast.map;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
//關于Map集合中的entrySet方法;
import static java.util.Map.*;

public class MapDemo5 {

	public static void main(String[] args) {
		// 1.定義Map集合,裝入資料
		Map<String, String> map = new HashMap<String, String>();
		map.put("one", "aaa");
		map.put("two", "bbb");
		map.put("3", "ccc");

		// 2.調用map集合的entrySet方法
		Set<Entry<String, String>> set = map.entrySet();
		// entrySet方法傳回的是一個Set集合,而集合中的對象是Map.Entry類型,對于Entry,我們可以使用泛型來規範它,它的泛型就是Map集合的泛型
		for (Entry<String, String> en : set) { // 從Set集合中周遊出來的就是Map.Entry類型對象
			System.out.println(en.getKey() + "  " + en.getValue()); // 可以通過Map.Entry的getKey,getValue,擷取對應的key與value.
		}
	}
}
/*
 * Set<Map.Entry<K, V>> entrySet(); entrySet方法的傳回值是Set集合,集合中的元素是 Map.Entry
 * 
 * 通過查找源代碼發現 Entry是一個接口,而這個接口是定義在Map接口中。
 */
           

HashMap集合鍵是Student值是String的案例

Map集合的key是不重複的,

HashMap它怎樣保證集合中的key的不重複?

HashMap集合相要保證它的key值不重複,與HashSet一樣,都需要重寫hashCode方法與equals方法.

package cn.itcast.hashmap;

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

//HashMap集合鍵是Student值是String的案例
public class HashMapDemo2 {
	public static void main(String[] args) {
		// 1.定義一個HashMap集合
		Map<Student, String> map = new HashMap<Student, String>();

		// 2.存儲對象
		map.put(new Student(1, "張三"), "張三");
		map.put(new Student(2, "李三"), "李三");
		map.put(new Student(3, "趙三"), "趙三");
		map.put(new Student(3, "趙三"), "經三"); 
		//如果沒有重寫Student類中的equals與hashCode,集合中有四個元素,如果存儲了,集合中有三個元素

		// 3.周遊 keySet
		// for (Student s : map.keySet()) {
		// System.out.println(s + "    " + map.get(s));
		// }

		// 4.周遊entrySet
		for (Map.Entry<Student, String> en : map.entrySet()) {
			Student key = (en.getKey());
			String value = en.getValue();
			System.out.println(key + "   " + value);
		}
	}
}
           

HashMap與Hashtable的差別

1. HashMap是非同步,Hashtable是同步。HashMap的性能比Hashtable高

2. HashMap中允許存儲null值null鍵  Hashtable中不允許

關于集合選擇:

1. 存儲時是直接存儲值,還是以key-value存儲。

Collection    Map

2. 如果選擇了Map集合

在實際開發中,對于Map集合,我們就選擇HashMap,不使用TreeMap。

雖然TreeMap集合可以排序,但是在實際操作中,排序也不使用它。

TreeMap集合鍵是Student值是String的案例

package cn.itcast.treemap;

import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;

import cn.itcast.hashmap.Student;

//TreeMap集合鍵是Student值是String的案例
public class TreeMapDemo2 {

	public static void main(String[] args) {
		// 1.建立一個TreeMap
		// TreeMap<Student, String> map = new TreeMap<Student, String>();
		// 1.1 建立一個TreeMap,給其指定比較器
		TreeMap<Student, String> map = new TreeMap<Student, String>(
				new Comparator<Student>() {
					@Override
					public int compare(Student o1, Student o2) {
						return o1.getName().compareTo(o2.getName());
					}
				});

		// 2.添加元素
		map.put(new Student(11, "tom"), "tom");
		map.put(new Student(2, "fox"), "fox");
		map.put(new Student(3, "kobe"), "kobe");
		// 問題:程式運作是否會出現問題 java.lang.ClassCastException
		// 原因:對于TreeMap集合,它的key元素,必須具有自然順序或者指定比較器。
		// 解決方案:1.給Student提供自然順序 2.給TreeMap集合指定比較器

		// 3.周遊
		for (Map.Entry<Student, String> ent : map.entrySet()) {
			System.out.println(ent.getKey() + "  " + ent.getValue());
		}
	}
}