【发布时间】:2013-01-17 21:50:19
【问题描述】:
我正在尝试根据所有其他值检查 ArrayList 中的所有值,如果它们的值太接近,则删除一个。这是一个例子:
// make an ArrayList of random numbers
ArrayList<Integer> nums = new ArrayList<Integer>();
for (int i=0; i<25; i++) {
int rand = int(random(255));
nums.add(rand);
println(rand);
}
// go through all numbers and compare
// (loop backwards to prevent ConcurrentModificationException)
for (int i = nums.size()-1; i >= 0; i--) {
int current = nums.get(i);
println("Current #: " + current);
// how to do this?
// not sure if there's a faster way that
// would avoid running through the entire
// ArrayList for every element...
for (Integer other : nums) {
if (abs(current - other) < 5) {
nums.remove(current);
}
}
}
寻找最干净、最有效的方法。
[为清楚起见进行了编辑]
【问题讨论】:
-
当前解决方案有什么问题?我看到的唯一选择是首先对 ArrayList 进行排序。
-
你为什么要抓
Exception,是什么让你认为它总是因为项目相同? (提示:查看异常 - 你可能会感到惊讶......) -
为什么结果“不满意”?发生了什么你不喜欢的事情?
-
-1 用于鸵鸟/口袋妖怪异常处理(必须全部隐藏)。
-
@JeffThompson 关键是,如果你隐藏所有异常,你就不能合理地调试你的代码——这就是你应该做的。
标签: java arraylist compare distance loops