首页 > 代码库 > 又是一次失败的计蒜客比赛经历

又是一次失败的计蒜客比赛经历

比赛内容: 

获得新技能--重写内部方法

重写方法:虽然失败了,但掌握了一项新技能不是吗?
  键值对,键的类型是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);
}

 

又是一次失败的计蒜客比赛经历