共计 2546 个字符,预计需要花费 7 分钟才能阅读完成。
1、Map 概述
Map 接口中键和值一一映射. 可以通过键来获取值。
给定一个键和一个值,你可以将该值存储在一个 Map 对象之后,你可以通过键来访问对应的值。
2、HashMap 类
HashMap 也用到了哈希码的算法,以便快速查找一个键,它根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。HashMap 最多只允许一条记录的键为 null,允许多条记录的值为 null。HashMap 非线程安全,即任一时刻可以有多个线程同时写 HashMap,可能会导致数据的不一致。
import java.util.HashMap; | |
public class MapDemo01 {public static void main(String[] args) {// Map 不同于 List,它的 key 不一定是数字 | |
HashMap map = new HashMap(); | |
map.put("Java 讲义",109); | |
map.put("python 讲义",10); | |
map.put("前端讲义",79); | |
// 如果新的 value 覆盖了原有的 value,该方法返回被覆盖的 value | |
System.out.println(map.put("python 讲义",99)); // 输出 10 | |
System.out.println(map); | |
// 判断是否包含指定 key | |
System.out.println("是否包含值为 python 讲义 key:"+map.containsKey("python 讲义")); | |
System.out.println("是否包含值为 99 value:"+map.containsValue(99)); | |
// 遍历 map | |
for (Object key : map.keySet()) {System.out.println(key+"-->"+map.get(key)); | |
} | |
} | |
} |
根据键查询值
import java.util.HashMap; | |
import java.util.Set; | |
/** | |
* Map 集合的遍历,根据键查询值 | |
* | |
* 思路:* A: 获取所有的键 | |
* B: 遍历键的集合,获取得到每一个键 | |
* C: 根据键查询值 | |
* */ | |
public class MapDemo02 {public static void main(String[] args) {// TODO Auto-generated method stub | |
HashMap<String, String> map = new HashMap<String, String>(); | |
map.put("hello", "world"); | |
map.put("java", "c++"); | |
map.put("sql", "os"); | |
System.out.println(map); | |
// A: 获取所有的键 | |
Set<String> set = map.keySet(); | |
// B: 遍历键的集合,获取得到每一个键 | |
for (String key : set) {// C: 根据键查询值 | |
String value = map.get(key); | |
System.out.println(key + "---" + value); | |
} | |
} | |
} |
根据键值对的对象查询键和值
import java.util.HashMap; | |
import java.util.Map; | |
import java.util.Set; | |
/** | |
* Map 集合的遍历,根据对象查询键和值 | |
* | |
* 思路:* A: 获取所有的键值对对象的集合 | |
* B: 遍历键值对对象的集合,得到每一个键值对的对象 | |
* C: 获取键和值 | |
* */ | |
public class MapDemo03 {public static void main(String[] args) {// TODO Auto-generated method stub | |
HashMap<String, String> map = new HashMap<String, String>(); | |
map.put("hello", "world"); | |
map.put("java", "c++"); | |
map.put("sql", "os"); | |
System.out.println(map); | |
// A: 获取所有的键值对对象的集合 | |
Set<Map.Entry<String, String>> set = map.entrySet(); | |
// B: 遍历键值对对象的集合,得到每一个键值对的对象 | |
for (Map.Entry<String, String> me : set) {// C: 获取键和值 | |
String key = me.getKey(); | |
String value = me.getValue(); | |
System.out.println(key + "---" + value); | |
} | |
} | |
} |
3、TreeMap 类
TreeMap 则是对键按序存放,因此它便有一些扩展的方法,比如 firstKey(),lastKey() 等,你还可以从 TreeMap 中指定一个范围以取得其子 Map。
键和值的关联很简单,用 put(Object key,Object value) 方法即可将一个键与一个值对象相关联。用 get(Object key) 可得到与此 key 对象所对应的值对象。
import java.util.Set; | |
import java.util.TreeMap; | |
public class MapDemo04{public static void main(String[] args) {TreeMap<String, String> map = new TreeMap<String, String>(); | |
// 插入键值对 | |
map.put("bkey", "bvalue"); | |
map.put("dkey", "dvalue"); | |
map.put("ckey", "cvalue"); | |
map.put("akey", "avalue"); | |
// 获取键值 Set | |
Set<String> keySet = map.keySet(); | |
// 将键值 Set 转成数组 | |
Object[] keyArray = keySet.toArray(); | |
// 按照键值依序获取值对象 | |
for (int i = 0; i < keyArray.length; i++) | |
System.out.println("key=" + (String) keyArray[i] + "; value=" + map.get((String) keyArray[i])); | |
} | |
} |
正文完
星哥玩云-微信公众号
