就业班JavaSE第二阶段第4天
day04 【Map】
特点:
Map集合是一个双列集合,一个元素包含两个值(key,value)
Map集合中的元素,key和value的数据类型可以相同,可以不同
Map集合中的元素,key是不允许重复的,value是可以重复的
Map集合中的元素,key和value是一一对应的
常用子类(实现类)
HashMap集合特点:
HashMap集合底层是哈希值:查询速度特别快
HashMap集合是一个无序的集合,存储元素和取出元素的顺序可能不一致
LinkedHashMap集合的特点:
底层是哈希值+链表(保证迭代的顺序)
是一个有序的集合,存储元素和取出元素的顺序是一致的
遍历Map集合:
使用Map集合中的方法keySet(),把Map集合所有的key却出来,存储到一个Set集合中
遍历Set集合,获取Map集合中的每一个key
通过Map集合中的方法get(key),通过key找到value
package com.itheima.test01;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class MapTest01 {
public static void main(String[] args) {
//创建Map集合
Map<String,String> map = new HashMap<>();
//往集合中添加元素
map.put("大众","兰博基尼");
map.put("宝马","劳斯莱斯");
map.put("奔驰","迈巴赫");
System.out.println(map);
//遍历map集合,通过map中的keySet()方法得到key值,存储到Set集合中
Set<String> keySet = map.keySet();
//创建迭代器对象
Iterator<String> it = keySet.iterator();
while (it.hasNext()){
//获取key值
String key = it.next();
//通过map集合中的get(key)方法获取value值
String value = map.get(key);
System.out.println(key+"="+value);
}
}
}
Entry键值对对象:
当map集合已创建,那么就会在Map集合中创建一个Entry对象,用来记录键与值(键值对对象,键与值的映射关系)
使用Entry键值对对象遍历Map集合:
使用map集合中的EntrySet(),把map集合中多个Entry对象取出来,存储到一个Set集合中
遍历Set集合,获取每一个Entry对象
使用Entry对象中的方法getKey()和getValue()获取键与值
package com.itheima.test02;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapEntryTest {
public static void main(String[] args) {
//创建map集合
Map<String, String> map = new HashMap<>();
//添加元素
map.put("大众","兰博基尼");
map.put("宝马","劳斯莱斯");
map.put("奔驰","迈巴赫");
System.out.println(map);
//通过map集合中的entrySet()方法得到entry键值对,存储在Set集合中
Set<Map.Entry<String, String>> entrySet = map.entrySet();
//增强for遍历entrySet集合获取键值对对象
for (Map.Entry<String, String> entry : entrySet) {
//通过entry中的getKey和getValue方法获取key和value值
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"="+value);
}
}
}
HashMap存储自定义类型键值:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class HashMapTest {
public static void main(String[] args) {
//HashMap存储自定义类型键值
Map<Student,String> map = new HashMap<>();
//添加元素,保证key值唯一,Student类中必须重写hashCode()和equals方法
map.put(new Student("耗子",25),"咸阳");
map.put(new Student("胖子",27),"曲阳");
map.put(new Student("老缩",26),"北京");
System.out.println(map);
//通过map中keySet方法获取key的集合
Set<Student> keySet = map.keySet();
//增强for遍历keySet集合
for (Student key : keySet) {
//通过map的get(key)方法,根据key值获取value值
String value = map.get(key);
System.out.println(key+"--->"+value);
}
System.out.println("===================");
//通过map中的entrySet()方法获取键值对对象存储在set集合中
Set<Map.Entry<Student, String>> entrySet = map.entrySet();
for (Map.Entry<Student, String> entry : entrySet) {
Student key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"--->"+value);
}
}
}
LinkedHashMap集合:
不可存储重复元素,有序集合
Hashtable与HashMap的区别:
Hashtable底层也是一个哈希表,是一个线程安全的集合,是单线程集合,速度慢
HashMap底层是一个哈希表,是一个线程不安全的集合,是多线程的集合,速度快
hashmap集合可以存储null值,null键
hashtable集合不能存储null值,null键
hashtable和Vector集合一样,在jdk1.2版本之后被(HashMap,ArrayList)取代了
Hashtable的子类Properties集合依然活跃,是唯一一个和IO流结合的聚合
|
|