如题,普通的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;