因此,我已将一个哈希表读入ArrayList以进行排序。 我有很多数字值后跟空格,然后是另一个数字,表示从文本文件中找到它的位置。所以我的未排序数组看起来像这样:
10 1
11 7
1 12
47 9
等等。
如果我按Collection.sort()排序;我的数组看起来像这样:
10 1
1 7
11 12
47 9
所以它按字母顺序比较,而不是数字。我想要的是忽略第二个数字并按照第一个单词对列表进行排序。
public void xor(arrayObject[] array){
try{
FileWriter textWriter = new FileWriter(new File("xor.txt"));
ArrayList<String> temp = new ArrayList<>();
String tempString;
for(int i = 0; i < array.length; i++){
if(array[i] != null){
tempString ="";
int hash = hashFunction(i);
int length = String.valueOf(array[hash].value).length();
if(array[hash].foundFromA && !array[hash].foundFromB){
tempString += Integer.toString(array[hash].value);
for(int a = 0; a < 10-length; a++){
tempString += " ";
}
tempString += "1";
temp.add(tempString);
}
else if(!array[hash].foundFromA && array[hash].foundFromB){
tempString += Integer.toString(array[hash].value);
for(int a = 0; a < 10-length; a++){
tempString += " ";
}
tempString += "2";
temp.add(tempString);
}
}
}
Collections.sort(temp);
for(String s : temp){
textWriter.write(s);
textWriter.write(System.lineSeparator());
}
textWriter.close();
System.out.println("Writing xor file succesful");
}
catch(IOException e){
System.out.println("Failed to save file");
}
}
答案 0 :(得分:1)
你可以创建一个比较器类并在sort方法中使用它
public class MyComparator implements java.util.Comparator<String> {
public int compare(String s1, String s2) {
return Integer.parseInt(s1.split( " " )[0]) - Integer.parseInt( s2.split( " " )[0] );
}
}
像这样使用
Collections.sort(temp, new myComparator());
答案 1 :(得分:1)
正如Abdou所说,您可以使用Comparator
,但您可以直接将其传递给sort
方法,而不是创建一个单独的类,这更容易使用。
import java.util.*;
public class HelloWorld {
public static void main(String[] args) {
ArrayList<String> myList = new ArrayList<>();
myList.add("10 1");
myList.add("11 7");
myList.add("1 12");
myList.add("47 9");
myList.add("110 9");
Collections.sort(myList, new Comparator<String>() {
public int compare(String a, String b) {
int n1 = Integer.parseInt(a.split(" ")[0]);
int n2 = Integer.parseInt(b.split(" ")[0]);
return n1 - n2;
}
});
for (String item : myList) {
System.out.println(item);
}
}
}
虽然我会为值创建一个类,但让这个类实现Comparable
接口。它会更干净,sort
方法可以开箱即用。