1、Map集合
1.1 Map接口
- Map接口特点:
- 用于存储任意键值对(Key-Value)
- 键:无下标、不可重复(唯一)
- 值:无下标、可以重复
- 常用方法:
方法名 | 描述 |
---|---|
V put(K key,V value) | 将对象存入到集合中,关联键值。key重复则覆盖原值。 |
Object get(Object key) | 根据键获取对应的值。 |
Set keySet() | 返回所有key。 |
Collection values() | 返回包含所有值的Collection集合。 |
Set<Map.Entry<K,V>> entrySet() | 键值匹配的Set集合。 |
代码示例:
1.2 Map实现类
1.2.1 HashMap
- Map:键值对形式存储对象,当key相等的时候,value会覆盖
- key-value:key唯一,value可以重复
- HashMap:key是无序不可以重复的
代码示例:
package Day15_map.hashmap;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* @author wzy
* @version 1.0
* @date 0004 2020-12-04 10:33
*
* Map:键值对形式存储对象,当key相等的时候,value会覆盖
* key-value:key唯一,value可以重复
* HashMap:key是无序不可以重复的
*
*
*/
public class Demo01 {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("a",1);
map.put("b",2);
map.put("c",3);
map.put("a",4);
map.put("c",4);
System.out.println(map);
//先把map的key值放入set集合中
Set<String> set = map.keySet();
//迭代set集合
Iterator<String> it = set.iterator();
while (it.hasNext()){
String key = it.next();
//使用map的get()方法获取map的value值
int value = map.get(key);
System.out.println("key:"+key+", value:"+value);
}
System.out.println("----------------------");
//把map中的映射关系存放在entry节点中,再把节点存在set集合里
Set <Map.Entry<String,Integer>> set1 = map.entrySet();
//迭代set集合
//使用foreach循环,使用getKey获取键,使用getValue获取值
for (Map.Entry entry:set1){
System.out.println("key:"+entry.getKey()+", value:"+entry.getValue());
}
System.out.println("----------------------");
//删除
map.remove("a");
//把map中的映射关系存放在entry节点中,再把节点存在set集合里
Set <Map.Entry<String,Integer>> set2 = map.entrySet();
//迭代set集合
//使用foreach循环,使用getKey获取键,使用getValue获取值
for (Map.Entry entry:set2){
System.out.println("key:"+entry.getKey()+", value:"+entry.getValue());
}
System.out.println(" ---------------//修改");
//修改key -- 先删后加
map.remove("b");
map.put("b",200);
System.out.println(map);
//修改value -- 直接添加,会覆盖
System.out.println("---------------//修改value -- 直接添加,会覆盖");
map.put("c",100);
System.out.println(map);
}
}
1.2.2 TreeMap
- JDK1.2版本,线程不安全,运行效率快。
- 允许用null 作为key或是value。
- 存储结构:哈希表
package Day15_map.treemap;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;
/**
* @author wzy
* @version 1.0
* @date 0004 2020-12-04 11:20
*
* TreeMap:底层是红黑树
* 存储映射关系时,key需要进行自然排序或者传递比较器
* 当key相等时,value会被覆盖
* 当比较规则compare()或者compareTo()返回0时,
* 会执行t.setValue(value),会实现新的value值覆盖旧的value
*
*/
public class Demo01 {
public static void main(String[] args) {
TreeMap<String, Integer> map = new TreeMap<>();
map.put("a",1);
map.put("a",2);
map.put("b",3);
map.put("c",4);
System.out.println(map);
System.out.println("----------遍历");
Set<String> set1 = map.keySet();
Iterator<String> it = set1.iterator();
while (it.hasNext()){
String key = it.next();
System.out.println("key:"+key+", value:"+map.get(key));
}
}
}