文章目录
创建一个map:
Map<String,Integer> map=new HashMap<>();
map添加\修改键值对:
map.put("key", 0);
map.computeIfAbsent(4, k->new ArrayList<>()); // 键是4, 值是一个新的动态数组
获得键对应的值:
map.get(5); // 5是一个键
map.getOrDefault(5, 0); // 如果map中有5这个键,就返回这个键对应的值,否则返回0
删除键值对:
map.remove("1"); // 1是map中的一个key值
判断对象是否在map的键\值中:
if(map.containsKey(key));
if(map.containsValue(value));
getOrDefault/computeIfAbsent
getOrDefault用于查询map中的数值;computeIfAbsent用于存储键值对或者补充键值对的内容。
int count = map.getOrDefault("key", 0)+1;
map.computeIfAbsent("key", k->new ProrityQueue<>()).add(3);
获得所有键的集合
Set<String> set=map.KeySet();
map排序
按照key排序
TreeMap按照key值进行升序排序,如果需要逆序排序:
Map<String, String> map = new TreeMap<String, String>(
new Comparator<String>() {
public int compare(String obj1, String obj2) {
// 降序排序
return obj2.compareTo(obj1);
}
});
Map<Integer, Integer> map = new TreeMap<Integer, Integer>(
new Comparator<Integer>() {
public int compare(Integer obj1, Integer obj2) {
// 降序排序
return obj2.compareTo(obj1);
}
});
按value排序
不能直接在map中将map中的元素按照value排序,但是可以以排序的方式输出:
Map<Integer, Integer> newMap = new HashMap<Integer, Integer>();
newMap.put(1,5);
newMap.put(2,3);
newMap.put(3,1);
List<Map.Entry<Integer,Integer>> list = new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet());
//然后通过比较器来实现排序
Collections.sort(list,new Comparator<Map.Entry<Integer,Integer>>() {
//升序排序
public int compare(Map.Entry<Integer, Integer> o1,
Map.Entry<Integer, Integer> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
for(Map.Entry<Integer,Integer> mapping:list){
System.out.println(mapping.getKey()+":"+mapping.getValue());
}
遍历map的4种方式
第一种,用for-each遍历key,然后通过key获得value:
for(Integer key : map.keySet()) {
int value=map.get(key);
// 对key和value进行操作
}
效率很低,因为从map中找value是比较费时间的。
第二种,分别使用for-each单独获得key或者value:
for(Integer key : map.keySet()) {
// 对key进行操作
}
for(Integer value : map.values()) {
// 对value进行操作
}
这是最快的遍历方式
第三种,使用entrySet方法:
for(Map.Entry<Integer, Integer> entry:map.entrySet()) {
// 对 entry.getKey()和entry.getValue()进行操作
}
第四种,使用Iterator迭代器:
Iterator<Map.Entry<Integer,Integer>> entries=map.entrySet().iterator();
while(entries.hasNext()) {
Map.Entry<Integer, Integer> entry=entries.next();
// 对entry.getKey()和entry.getValue()进行操作
}
参考:
http://www.cnblogs.com/fqfanqi/p/6187085.html