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]);
}
}