首先我们来了解一下Map接口
(1)Map
Map包含了一系列“键(key)-值(values)”之间的映射关系,一个Map对象可以看作是一个“键-值”对的集合,在该集合中可以通过一个键找到其对应的值。
该接口是独立于Collection接口体系的,Map体系中所有类和接口的方法都源自于Map接口。
我们使用到的实现Map接口的类主要为HashMap类和TreeMap类。
(2)HashMap
HashMap 是 Map 接口的实现类,它存储的内容是键值对(key-value)映射,其中 key、value 都可以为 null。HashMap 是无序的,即被存入到 HashMap 中的元素,在遍历 HashMap 时,其输出是无序的。
由于采用了Hash函数,对于Map的普通操作性能是稳定的,但如果使用iterator访问Map,为了获得高的运行效率最好在创建HashMap时不要将它的容量设得太大。
创建HashMap
public static void main(String[] args) {
// 创建 HashMap 集合,key 存储字符串类型,value 存储整数类型
Map<String, Integer> hashMap = new HashMap<>();
}
HashMap集合的常用方法
put(key,value); //往集合中添加元素,key 值不可重复,重复时会覆盖之前的 value 值
get(Object key); //返回指定键的值(value),若不存在则返回null
remove(Object key); //根据 key 或者 key-value 去除集合中元素,并分别返回 value 值和 Boolean 值
boolean containsKey(Object key); //如果此映射包含指定键的映射,则返回true 。
boolean containsValue(Object value); //如果此映射将一个或多个键映射到指定的值,则返回true 。
int size(); //返回集合长度
boolean isEmpty(); //判断集合是否为空
void clear(); //清除集合中的所有元素
values(); //返回一个新集合,获取集合中所有元素的 values
keySet(); //返回一个新集合,获取集合中所有元素的 key
常用方法代码示例:
public static void main(String[] args) {
// 创建 HashMap 集合,key存储字符串类型,value存储整数类型
Map<String, Integer> hashMap = new HashMap<>();
// 添加元素
hashMap.put("李四",28);
hashMap.put("张三",26);
hashMap.put("王五",26);
// 根据 key 获取 value 值
Integer zs = hashMap.get("张三");
System.out.println(zs);
// 获取所有 key 值
Set<String> strings = hashMap.keySet();
System.out.println(strings);
// 获取所有 value 值
Collection<Integer> values = hashMap.values();
System.out.println(values);
// 根据 key 去除元素
Integer ww = hashMap.remove("王五");
System.out.println(ww);
// 根据 key-value 去除元素
boolean boole = hashMap.remove("李四", 28);
System.out.println(boole);
System.out.print(hashMap);
}
结果示例:
26
[李四, 张三, 王五]
[28, 26, 26]
26
true
{张三=26}
(3)TreeMap
TreeMap类和TreeSet类相似,是基于红黑树实现的,是采用一种有序树的结构实现了Map的子接口SortedMap。该类将按键的升序的次序排列元素。
创建TreeMap
public static void main(String[] args) {
// 创建 TreeMap 集合,key 存储字符串类型,value 存储整数类型
Map<Integer, Stirng> map = new TreeMap<>();
}
TreeMap的常用方法
clear(); //清除集合中的所有元素
boolean containsKey(Object key); //如果此映射包含指定键的映射,则返回true
boolean containsValue(Object value); //如果此映射将一个或多个键映射到指定的值,则返回true
int size(); //返回集合长度
get(Object key); //返回指定键的值(value),若不存在则返回null
firstKey(); //返回当前映射中的第一个键
lastKey(); //返回当前映射中的最后一个键
(4)HashMap和TreeMap的遍历方法
1.先得到key值,再使用iterator遍历集合
TreeMap<Integer,String> map = new TreeMap<>();
map.put(1,"xixi");
map.put(2,"jiaojiao");
Set<String> t = map.getKey();
Iterator it = t.iterator();
Integer key = null; //必须先进行key值的声明
while (it.hasNext()) {
key = (Integer)it.next();
String value = map.get(key);
System.out.println(value);
}
2.先得到key值,再使用增强for进行遍历(推荐使用增强for)
TreeMap<Integer,String> map = new TreeMap<>();
map.put(1,"xixi");
map.put(2,"jiaojiao");
for(int key:map.getKey){
System.out.println(map.get(key));
}
3.直接通过value值,使用iterator遍历
TreeMap<Integer,String> map = new TreeMap<>();
map.put(1,"xixi");
map.put(2,"jiaojiao");
Collection<String> t = map.values();
Iterator it = t.Iterator();
String value = null; //必须声明
while(it.hasNext()){
value = (String)it.next();
System.out.println(value);
}
4.直接通过value值,使用增强for遍历(推荐使用增强for)
TreeMap<Integer,String> map = new TreeMap<>();
map.put(1,"xixi");
map.put(2,"jiaojiao");
for(String value:map.values()){
System.out.println(value);
}