package JiHe.Map;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.swing.RowFilter.Entry;
/*
* HashTable类:
* 此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。
* 为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法。
*
* HashTable集合:底层是哈希表数据结构,不可以存放null键null值,该集合是线程同步的,
* HashMap集合 :底层是哈希表数据结构,可以存放null键null值,该集合是不同步线程的
* TreeMap:底层是二叉树数据结构,线程不同步
*/
public class HashMap_Test {
public static void main(String[] args) {
//创建一个map集合
HashMap<String,String> map = new HashMap<String,String>();
//添加元素
map.put("01", "刘帅");
map.put("02", "李枫");
map.put("03", "小学");
//在HashMap中null是可以通过键来存放的,如果是HashTable是不可以存放null的
// map.put(null, "北大");
map.put("04", null);
// map.put(null, null);
//根据键和值来判断数据是否存在
System.out.println(map.containsKey("02"));
System.out.println(map.containsValue("小学"));
//删除数据,先找找到02这个键,删除后,将删除键的值返回
// System.out.println(map.remove("02"));
//获取数据,通过键(K)来获取值(V),如果没有找到数据,返回一个null
System.out.println(map.get("02"));
System.out.println(map.get(null));
//获取map集合中所有的值,返回来一个Collection对象,
Collection<String> coll = map.values();
System.out.println(coll);
System.out.println("-------------------------华丽分割线--------------------------");
// ************************重点***********************
// keySet返回此映射中所包含的键的 Set 视图。获取所有的键和值
/*
* 将所map中所有的键存放到set集合中,因为set具备迭代器,所有可以迭代方式取出的键,在根据get方法,获取每一个键对应的值
*/
//1.先调用HashMap集合的keySet函数,将所有键获取出来存储到一个Set集合中去
Set<String> keySet = map.keySet();
//2.有了Set集合中的键,通过迭代拿到全部的值
Iterator<String> it = keySet.iterator();
while(it.hasNext()){
String key = it.next(); //每循环一次,就拿到一个键
String value = map.get(key); //通过拿到的键,来获取值
//将拿到的键和值打印出来
System.out.println("key:"+key+"==value:"+value); //取出了所有的键
}
System.out.println("-------------------------华丽分割线--------------------------");
/*
* entrySet()返回此映射所包含的映射关系的 Set 视图
* Set<Map.Entry<K,V>> entrySet():将map集合中的映射关系存入到set集合中,而这两个关系的数据类型就是map.entry
*/
//调用map集合中的entrySet方法,返回来一个Set集合,该集合的泛型是Map.Entry,但是Map.Entry本身又有泛型的,Map.Entry <String, String>
Set<java.util.Map.Entry <String, String>> entrySet = map.entrySet();
//创建一个迭代器,迭代器的泛型的Set集合是一样的
Iterator<java.util.Map.Entry<String,String>> it2 = entrySet.iterator();
while(it2.hasNext()){
//将集合的元素存储到一个Map.Entry里面去
java.util.Map.Entry<String, String> me = it2.next();
System.out.println("K:"+me.getKey()+".........V:"+me.getValue());
}
}
}