1.Map集合类型
-
Map :存储的键值对映射关系,根据key找到value
-
HashMap:(1)采用哈希表存储结构(2)优点:添加,查询,删除速度快(3)缺点:key无序
-
LinkedHashMap:采用哈希表和链表存储结构(2)key有序(添加顺序)
-
TreeMap:(1)采用二叉树(红黑树)的存储结构(2)Key有序(自然顺序),按照内容查询的速度比List快(3)缺点:查询速度没有HashMap快
2.Map基本方法
package com.zhang.map;
import java.util.*;
/**
* HashMap:哈希表
* Key唯一,无序--HashSet,value不唯一,无序--Collection 存在相同的key时,后面的value会覆盖前面的value
* LinkedHashMap:哈希表+链表
* Key唯一,有序(添加顺序)--LinkedHashSet,value不唯一,无序--Collection 存在相同的key时,后面的value会覆盖前面的value
* TreeMap:红黑树
* Key唯一,有序(自然顺序--TreeSet),value不唯一,无序--Collection 存在相同的key时,后面的value会覆盖前面的value
*
* Set和Map的关系:
* 如果Map中只存Key,不存Value,就是对应的Set
* Set就是对应Map的Key的集合
*
* Map的方法:
* map.put("us","America") 存入键值对
* map 获取键值对集合 {jp=Japan, uk=England, en=England, cn=China, us=America}
* map.entrySet() 获取键值对集合 [jp=Japan, uk=England, en=England, cn=China, us=America]
* map.get("jp") 找到Key:jp对应的value Japan
* map.keySet() 获取所有的Key,返回Set类型 [jp, uk, en, cn, us]
* map.values() 获取所有的values,返回Collection类型 [Japan, England, England, China, America]
* 遍历map:Set<Map.Entry<String, String>> entrySet = map.entrySet();
*/
public class MapDemo01 {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("cn", "China");
map.put("jp", "Japan");
map.put("us", "the United States");
map.put("us", "America");
map.put("uk", "England");
map.put("en", "England");
System.out.println(map.size());//5
System.out.println(map);//{jp=Japan, uk=England, en=England, cn=China, us=America}
System.out.println(map.entrySet());//[jp=Japan, uk=England, en=England, cn=China, us=America]
System.out.println(map.get("jp"));//Japan
System.out.println(map.get("A"));//null
System.out.println(map.keySet());//[jp, uk, en, cn, us]
System.out.println(map.values());//[Japan, England, England, China, America]
Map<String, String> map1 = new LinkedHashMap<String, String>();
map1.put("cn", "China");
map1.put("jp", "Japan");
map1.put("us", "the United States");
map1.put("us", "America");
map1.put("uk", "England");
map1.put("en", "England");
System.out.println(map1.size());//5
System.out.println(map1);//{cn=China, jp=Japan, us=America, uk=England, en=England}
System.out.println(map1.entrySet());//[cn=China, jp=Japan, us=America, uk=England, en=England]
System.out.println(map1.get("jp"));//Japan
System.out.println(map1.get("A"));//null
System.out.println(map1.keySet());//[cn, jp, us, uk, en]
System.out.println(map1.values());//[China, Japan, America, England, England]
Map<String, String> map2 = new TreeMap<String, String>();
map2.put("cn", "China");
map2.put("jp", "Japan");
map2.put("us", "the United States");
map2.put("us", "America");
map2.put("uk", "England");
map2.put("en", "England");
System.out.println(map2.size());//5
System.out.println(map2);//{cn=China, en=England, jp=Japan, uk=England, us=America}
System.out.println(map2.entrySet());//[cn=China, en=England, jp=Japan, uk=England, us=America]
System.out.println(map2.get("jp"));//Japan
System.out.println(map2.get("A"));//null
System.out.println(map2.keySet());//[cn, en, jp, uk, us]
System.out.println(map2.values());//[China, England, Japan, England, America]
System.out.println("=============遍历==============");
//遍历
//方法一:得到所有Key组成的Set
Set<String> keySet = map.keySet();//获取所有的Key
for (String key : keySet) {
System.out.println(key + "--->" + map.get(key));
}
//运行结果:
//jp--->Japan
//uk--->England
// en--->England
// cn--->China
//us--->America
//方法二:得到所有Entry(Entry:哈希表或红黑树的一个节点)组成的Set集合 ,返回Set<Map.Entry<K, V>>
Set<Map.Entry<String, String>> entrySet = map.entrySet();
System.out.println(entrySet);//[jp=Japan, uk=England, en=England, cn=China, us=America]
Iterator<Map.Entry<String, String>> iterator = entrySet.iterator();
while (iterator.hasNext()) {
Map.Entry<String, String> next = iterator.next();
//System.out.println(next);
// jp=Japan
// uk=England
// en=England
// cn=China
// us=America
System.out.println(next.getKey() + ":" + next.getValue());
//jp:Japan
//uk:England
//en:England
//cn:China
//us:America
}
}
}