【JAVA】leetcode刷题基础:map

创建一个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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值