对于作业,我被赋予了一个任务,即在预先填充的文件中读取ArrayList,对其进行排序,并删除所有重复项。我的任务是使用binarySearch API执行此操作。他非常具体。我之前从未这样做过,而且我不确定我需要做些什么来让Collections.binarySearch工作。教练给了我一个开始,但我知道我正在做的Collections.binarySearch的参数不正确,但我不能为我的生活找出正确的方法来做到这一点。如果有人可以提供帮助,我们将不胜感激。
这是我到目前为止所拥有的。如果它很重要,我可以发布set1.txt
中的整数public static void main(String[] args) {
collections program = new Collections();
program.readFile();
}//main
public void readFile() {
File f = new File("set1.txt");
try {
Scanner in = new Scanner(f);
while (in.hasNext()) {
int x = in.nextInt();
int index = Collections.binarySearch(x,0);
if (index == 1)
list.add(x);
}//while
Collections.sort(list);
in.close();
}//try
catch (IOException e) {
e.printStackTrace();
}//catch
}//readFile
答案 0 :(得分:0)
一旦您对列表进行了排序,重复的元素(如果有的话)将彼此相邻,因此您可以简单地遍历列表,删除任何重复的元素,无需搜索。 (我们向后迭代以避免在删除元素后决定是否增加循环计数器的尴尬。)
Collections.sort(list);
for (int i = list.size()-1; i >= 0; --i)
if (list.get(i).equals(list.get(i+1)))
list.remove(i);
但确保唯一性的一种更方便的方法是创建一个Set
来保存列表中的内容,然后从该集创建一个新列表。新列表将以集合的迭代顺序包含输入列表的唯一元素,因此我们可以使用TreeSet
同时进行排序。 (使用HashSet
创建列表,然后调用Collections.sort(list)
可能会或可能不会更快,并且上述解决方案可能会更快 - 如果对您来说很重要,请进行配置以确保它“#1}}。问题,然后是基准。)
list = new ArrayList<>(new TreeSet<>(list));
如果重复使用输入列表很重要(无论是作为任意作业要求还是最小化内存使用/流失),您都可以执行类似
的操作Set<T> set = new TreeSet<>(list);
list.clear();
list.addAll(set);
答案 1 :(得分:0)
由于新Java已经发布,我不妨发布这篇文章以帮助&#34;未来的搜索者&#34;。
ArrayList<String> newList = oldList.stream().distinct().collect(Collectors.toCollection(ArrayList::new));