复杂的数组遍历和元素删除

时间:2014-01-01 08:39:05

标签: java arrays

给定一个由四个点组成的数组,使用相同的点生成一个新的数组/向量/ arraylist(更容易)但是如果有重复X值的点,则只保存具有最高Y值的Point。

例如:

如果给定(3,2),(3,1),(1,2),(1,1),则此方法应仅输出(3,2)和(1,2)。

如果给定(3,2),(3,3),(3,4),(3,5),则此方法应仅输出(3,5)。

关于我应该如何处理的任何想法?我的解决方案一直在运行ConcurrentModificationException。

(for each point a in array) {
    (for each point b in newArray) {
        (if a and b have the same x and a has a greater y) {
            remove a 
            add b
        } else {
            add b
    }
}

4 个答案:

答案 0 :(得分:1)

简单HashMap<Integer,Integer>可行。只需查看ContainsKey()并比较值,有条件地添加或不添加。

答案 1 :(得分:0)

如果您的代码处于多线程环境中,请使用

ConcurrentHashMap<Integer, Integer>

并遍历每个元素并比较元素并将最高元素放在Map

答案 2 :(得分:0)

put the first point in result list
for each of the other three:
    if last X in result list not equal to this X:
        append point
    else if last Y < this Y:
        replace last point
return result list

我会把javafication留给你

答案 3 :(得分:0)

通过javadocs,你可能正在做类似的事情,修改一个Collection并在另一个线程的同时迭代它。

ConcurrentModificationException

的原因