1)非汉字(即不在文件中的 key 中)永远小于汉字
2)两个非汉字的大小顺序即为 unicode 码的大小
3)两个汉字的大小为拼音字符串的顺序,例如 帆(FAN)<软(RUAN)。拼音相等则再比较unicode 码
请先用文字描述实现思路,再用代码实现上述拼音排序,在做好初始化的前提下,提供一个 int compare(char c1,char c2)方法,以最快的速度返回两个 char 的比较结果(该方法可能会被调用上亿次) (请用代码实现)
static int compare(char c1,char c2){ if(infile(c1)==0&&infile(c2)==0){ if(c1>c2) return 1; else if(c1==c2) return 0; else return -1; }else if(infile(c1)==0&&infile(c2)==1){ return -1; }else if(infile(c1)==1&&infile(c2)==0){ return 1; }else { char[] a = map.get(c1).toCharArray(); char[] b = map.get(c2).toCharArray(); int n = Math.min(a.length,b.length); for (int i = 0;i<n;i++){ if(a[i]<b[i]){ return -1; }else if(a[i]>b[i]){ return 1; } } if(c1>c2) return 1; else if(c1==c2) return 0; else return -1; } } static int infile(char c1){ readfile(new File("b.txt")); if(map.containsKey(c1)) return 1; else return 0; } static void readfile(File file){ StringBuilder text = new StringBuilder(); try{ BufferedReader br = new BufferedReader( new FileReader(file)); String s =null; while((s = br.readLine())!=null){ text.append(s); } }catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } String[] strs = text.toString().split(";"); for (String str:strs ) { String[] arr = str.split("="); map.put(arr[0].charAt(0),arr[1]); } }