我正在努力更好地理解比较器接口 在Java中与对象和类交互。
我有一个未排序单词的字符串数组。 我想将该数组复制到第二个数组 和alphabetize 只第二个数组。
当我调用Array.sort方法时 并传入第二个数组和比较器对象作为参数, 两个数组最终按字母顺序排序 我不明白为什么????
以下是一个例子:
import java.util.Arrays;
import java.util.Comparator;
public class test2 {
public static void main(String[] args) {
// first array is unsorted
String[] words_unsorted = { "the", "color", "blue", "is", "the",
"color", "of", "the", "sky" };
// copy array to another array to be sorted
String[] words_sorted = words_unsorted;
// instantiate a reference to a new Comparator object
Comparator<String> listComparator = new Comparator<String>() {
public int compare(String str1, String str2) {
return str1.compareTo(str2);
}
};
// invoke sort method on words_sorted array
Arrays.sort(words_sorted, listComparator);
// compare arrays /
int size = words_sorted.length;
for(int i = 0; i < size; i++) {
System.out.println(words_unsorted[i] + " " + words_sorted[i]);
}
}
}
输出:
blue blue
color color
color color
is is
of of
sky sky
the the
the the
the the
答案 0 :(得分:5)
只有一个数组,words_sorted
和words_unsorted
指的是同一个数组,因为你在这里指定了一个引用:
String[] words_sorted = words_unsorted;
您将需要数组本身的副本,而不是数组引用的副本。使用Arrays.copyOf
通过复制旧数组来创建新数组。
String[] words_sorted = Arrays.copyOf(words_unsorted, words_unsorted.length);
答案 1 :(得分:0)
String[] words_sorted = words_unsorted;
只是让words_sorted
指向与words_unsorted
相同的内存位置,这意味着您对其中任何一项所做的任何更改都会反映在其他内容中
相反,您可以使用类似......
之类的东西复制数组System.arraycopy(words_unsorted, 0, words_sorted, 0, words_unsorted.length);