Map集合类型
- Map
- 特点:存储的键值对映射关系,根据key可以找到value
- HashMap
- 采用Hashtable哈希表存储结构(神奇的结构)
- 优点:添加速度快 查询速度快 删除速度快
- 缺点:key无序
- LinkedHashMap
- 采用哈希表存储结构,同时使用链表维护次序
- key有序(添加顺序)


- TreeMap
- 采用二叉树(红黑树)的存储结构
- 优点:key有序 查询速度比List快(按照内容查询)
- 缺点:查询速度没有HashSet快

使用各种Map存储国家简称-国家名称映射
public class TestMap1 {
public static void main(String[] args) {
//创建一个Map集合对象
//Map <String,String>map = new HashMap<String,String>();
//Map <String,String>map =
//new LinkedHashMap<String,String>();
Map<String, String> map = new TreeMap<String, String>();
//向Map集合中添加元素(key-value)
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");
//从Map中根据key获取value
System.out.println(map.size());
// System.out.println(map);
// System.out.println(map.keySet());//Set 得到所有的key
// System.out.println(map.values());//Collection 得到所有的value
// System.out.println(map.get("cn"));
// System.out.println(map.get("it"));
//Map的遍历
//思路1:先得到所有的key(Set),然后根据key找到value
Set<String> keySet = map.keySet();
for (String key : keySet) {
System.out.println(key + "---->" + map.get(key));
}
//思路2:先得到所有的key-value组成的Set,
//然后输出每个key-value
Set<Map.Entry<String, String>> entrySet = map.entrySet();
Iterator<Map.Entry<String, String>> it = entrySet.iterator();
while (it.hasNext()) {
//取出一个Entry
Map.Entry<String, String> entry = it.next();
//输出一个Entry
//System.out.println(entry);
System.out.println(entry.getKey() + "->"+ entry.getValue());
}
}
}
使用各种Map存储学号-学生映射
public class TestMap2 {
public static void main(String[] args) {
//创建一个Map对象用户存储key-value
Map<Integer,Student> map = new HashMap<Integer,Student>();
//Map <Integer,Student>map = new TreeMap<Integer,Student>();
//使用Map对象存储多个key-value
Student stu1 = new Student(1, "zhangsan", 23, 98.2);
Student stu2 = new Student(2, "zhangsan", 23, 98);
Student stu3 = new Student(3, "wangwu", 22, 98.5);
Student stu4 = new Student(1, "zhangsan", 23, 98.2);
map.put(stu1.getSno(), stu1);
map.put(stu2.getSno(), stu2);
map.put(stu3.getSno(), stu3);
map.put(stu4.getSno(), stu4);
//Map的其他方法
//map.remove(1);
//map.clear();
//map.replace(1, new Student(1, "zhaoliu", 23, 100));
map.containsKey(1);
map.containsValue(stu4);
map.isEmpty();
//从Map对象中根据学号找到对应的学生
Student stu = map.get(1);//key 学号
// List list = new ArrayList();;
// list.get(1);//索引
if(stu == null){
System.out.println("该学生不存在");
}else{
System.out.println(stu);
}
System.out.println(map.size());//
System.out.println(map.toString());
//遍历
Set<Entry<Integer,Student>> entrySet = map.entrySet();
for(Entry<Integer,Student> entry:entrySet){
Student student = entry.getValue();
System.out.println(student);
}
}
}