仅为学习记录,仅供参考。
Java-Map
1.概念
Interface Map<K,V>
:Map是一个泛型接口,K和V指的分别是key和value(键和值),可以是任何的引用数据类型。所以Map集合存储的是键-值对。
2.规则
每个Map对象不能包含重复的键(key),每个键可以映射到最多一个值(value)。
(key,value1)
和(key,value2)
不会同时存储在Map对象中,如果向Map中添加了key值相等的键值对,那么后面添加的键值对的value将会替换掉之前的。例如:
import java.util.HashMap;
import java.util.Map;
public class MapMain {
public static void main(String[] args) {
Map<String,String> map=new HashMap<String, String>();
/*
* 添加元素:put()
* */
map.put("201701","猪小明");
map.put("201702","闰土");
//当key重复,后面的value会替换之前的value
map.put("201703","王炸");
map.put("201703","毛台");
System.out.println(map);
}
}
编译运行:
{201701=猪小明, 201703=毛台, 201702=闰土}
看上面的代码,Map是接口,不能直接创建对象,这里使用HashMap创建对象。put(key,value)方法是Map集合添加元素的方法。上面执行4个put()方法,但是运行结果显示集合中只有3个键值对,原因是执行map.put("201703","毛台")
时发现map中已经有"201703"这个key,所以用"毛台"替换掉"王炸"。而且HashMap不保证元素存储的排列顺序。
3.使用
Map集合的常用方法有这些:
V put(K key,V value):添加元素
V remove(Object key):根据键删除键值对
void clear():清空集合
boolean containsKey(Object key):判断集合是否包含key
boolean containsValue(Object value):判断集合是否包含value
boolean isEmpty():判断集合是否为空
int size():返回集合大小,即键值对的个数。
V get(Object K):根据key返回value
Set<K> keySet():返回Map集合对象的key的集合,为Set类型
Collection<V> values():返回Map集合对象的value的集合,为Collection类型
Set<Map.Entry<K,V>> entrySet():返回所有键值对对象的集合
示例:
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapMain03 {
public static void main(String[] args) {
Map<String,String> map=new HashMap<String, String>();
map.put("201701","猪小明");
map.put("201702","妹大爷");
map.put("201703","王炸");
map.put("201704","米线儿");
System.out.println(map);
System.out.println("=====+=====+=====");
System.out.println(map.size());
System.out.println(map.isEmpty());
System.out.println();
System.out.println(map.containsKey("201701"));
System.out.println(map.containsValue("孙悟空"));
System.out.println();
System.out.println(map.remove("201700000001"));
System.out.println(map.remove("201704"));
System.out.println(map);
System.out.println();
System.out.println(map.get("201701"));
System.out.println(map.get("201700000001"));
System.out.println();
// map.clear();
System.out.println("=====+=====+=====");
Set<String> keySet = map.keySet();//获取key的集合,类型为Set
System.out.println(keySet);
Collection<String> valuesColl = map.values();//获取values的集合,类型为Collection
System.out.println(valuesColl);
Set<Map.Entry<String, String>> entries = map.entrySet();
System.out.println(entries);//获取键值对对象的集合。
}
}
编译运行:
{201704=米线儿, 201701=猪小明, 201703=王炸, 201702=妹大爷}
=====+=====+=====
4
false
=====+=====+=====
true
false
=====+=====+=====
null
米线儿
{201701=猪小明, 201703=王炸, 201702=妹大爷}
=====+=====+=====
猪小明
null
=====+=====+=====
[201701, 201703, 201702]
[猪小明, 王炸, 妹大爷]
[201701=猪小明, 201703=王炸, 201702=妹大爷]
4.遍历
遍历Map集合对象,即获取Map对象中的每一个key和value,一般有两种方式:
- 先利用keySet()方法获取key的集合,假设命名为keySet,再根据keySet中的每一个元素,利用get()方法获取到每一个key对应的value,这样可以获取到Map对象的每一个key和value。
- 利用entrySet()方法直接获取Map集合对象的键值对对象的集合,假设命名为entrySet,键值对对象中可以分别获取到key和value,这样,遍历这个entrySet集合,就可以获取到每一个key和value。
例如:
方式1遍历:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapMain04 {
public static void main(String[] args) {
Map<String,String> map=new HashMap<String, String>();
map.put("201701","猪小明");
map.put("201702","妹大爷");
map.put("201703","王炸");
map.put("201704","米线儿");
//方式1遍历
Set<String> keySet = map.keySet();//获取key的集合
for(String key: keySet){
String value = map.get(key);//根据key获取value
System.out.println(key+"-"+value);
}
}
}
编译运行:
201704-米线儿
201701-猪小明
201703-王炸
201702-妹大爷
方式2遍历:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapMain04 {
public static void main(String[] args) {
Map<String,String> map=new HashMap<String, String>();
map.put("201701","猪小明");
map.put("201702","妹大爷");
map.put("201703","王炸");
map.put("201704","米线儿");
/*
* 方式2遍历
* */
Set<Map.Entry<String, String>> entries = map.entrySet();//获取键值对对象集合
for (Map.Entry<String,String > e:entries){
//利用键值对对象的方法getKey()和getValue()就可以获取key和value
System.out.println(e.getKey()+"-"+e.getValue());
}
}
}
编译运行:
201704-米线儿
201701-猪小明
201703-王炸
201702-妹大爷
仅为学习记录,仅供参考。