如题,普通的hashmap会根据key的大小进行重新拍序,这种情况下可以使用LinkedHashMap
两种方法,hashmap 或者是 两个list

        final int num = 2;
       HashMap<Character, Integer> map = new LinkedHashMap<Character, Integer>();
       for(int i = 0; i < str.length();i++) {
           char ch = str.charAt(i);
           if(map.containsKey(ch)) {
               map.put(ch, 2);
           }else {
               map.put(ch, 1);
           }
       }
       char ch =' ';
       int res = 0;
        for (java.util.Map.Entry<Character, Integer> entry : map.entrySet()) {
            Integer value =  entry.getValue();
            if(value != 2) {
                ch = entry.getKey();
                break;
            }
        }

        for(int i = 0; i < str.length();i++) {
            if(str.charAt(i) == ch)
            {
                res = i;
                break;
            }
        }
        return res;

或者

        ArrayList<Character> list_new = new  ArrayList<Character>();
       ArrayList<Character> list = new ArrayList<Character>();
       for(int i = 0; i < str.length();i++){
           if(list_new.contains(str.charAt(i)))
               list.add(str.charAt(i));
           else
               list_new.add(str.charAt(i));
       }
       char cha=' ';
       for(int i = 0,j = 0; i < list_new.size();i++){
           char ch = list_new.get(i);
           if(list.contains(ch)){
               continue;
           }else{
               cha = ch;
               break;
           }
       }
       int res = -1;

           for(int i = 0; i < str.length();i++) {
               if(str.charAt(i)== cha) {
                   res = i;
                   break;
               }
           }

           return res;