比赛内容:
获得新技能--重写内部方法
重写方法:虽然失败了,但掌握了一项新技能不是吗?
键值对,键的类型是int[2],判断如何int[]里面的值相等,containsKey(Object key)方法就返回true,同时值+1
失败原因是内部方法使用的还是while循环,时间复杂度并没有减少
Map<int[],Integer> map =new HashMap<int[],Integer>(){ @Override public boolean containsKey(Object key) { // TODO Auto-generated method stub //return super.containsKey(key); Iterator<Map.Entry<int[],Integer>> i = entrySet().iterator(); if (key==null) { while (i.hasNext()) { Entry<int[],Integer> e = i.next(); if (e.getKey()==null) return true; } } else { while (i.hasNext()) { Entry<int[],Integer> e = i.next(); int[] temp = (int[]) key; if (temp[0]==e.getKey()[0]&&temp[1]==e.getKey()[1]){ e.setValue(e.getValue()+1); return true; } } } return false; } };
目的是想替换掉下面的代码:
label: for(int i=0;i<nums.length;i++){ for(Entry<int[],Integer> entry:map.entrySet()){ int[] temp=entry.getKey(); if(temp[0]==nums[i][0]&&temp[1]==nums[i][1]){ entry.setValue(entry.getValue()+1); continue label; } } }
更改后这样写:
for(int i=0;i<nums.length;i++){ //nums是一个int[] if(map.containsKey(nums[i])); else map.put(nums[i], 1); }
时间: 2024-10-01 18:21:28