Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于另一个ArrayList删除ArrayList的元素_Java_Arraylist - Fatal编程技术网

Java 基于另一个ArrayList删除ArrayList的元素

Java 基于另一个ArrayList删除ArrayList的元素,java,arraylist,Java,Arraylist,我有三个数组列表。画布上点的两个保持坐标(xCoord,yCoord)。这是一个点对点的程序。第三个arraylist保存代码,用于计算可从画布上移除的点对合成图片的“损坏”或损坏程度最低。这是基于一个简单的算法,它返回一个“临界值”。临界值较小的点比临界值较高的点对图片的破坏更小 我的问题是根据最小的临界值从x和y阵列列表中删除n个点。我已经实现了用户输入的代码 public void removeDots(int numberDesired){ int i = 0; for

我有三个数组列表。画布上点的两个保持坐标(xCoord,yCoord)。这是一个点对点的程序。第三个arraylist保存代码,用于计算可从画布上移除的点对合成图片的“损坏”或损坏程度最低。这是基于一个简单的算法,它返回一个“临界值”。临界值较小的点比临界值较高的点对图片的破坏更小

我的问题是根据最小的临界值从x和y阵列列表中删除n个点。我已经实现了用户输入的代码

public void removeDots(int numberDesired){
    int i = 0;

    for (i =0; i<numberDesired; i++){

        xCoord.remove(critDots.get(i); //No idea, just trying random things. 
        yCoord.remove(critDots.get(i);

    }
}


   for (i = 0; i < xCoord.size()-1; i++) {
            critValue = Algorithm Calculations
            critDots.add(critValue);
        }
从最不重要到最重要进行组织,但我不确定这将如何影响我的xCoord/yCoord的顺序

如果你能给我一些建议,帮我找到正确的方向,我将不胜感激。
另外,xCoord、yCoord和critDots都是ArrayList

将x和y值放在单独的
Dot
类中:

class Dot {
    private final int x;
    private final int y;

    // hashValue and equals methods
}
将画布上的点列表存储在列表中:

List<Dot> dots;

正如您所说的,
dot
指的是一对
x
y
坐标,那么在从
ArrayList
中删除它们时,您需要这两个坐标。只需找到一对
x
y
坐标并将其移除

记住把它们都拿走,因为你必须保持秩序

public void removeDots(int x, int y){
    //find that pair
    for(i=0; i<xCoord.size(); i++) {
        if(xCoord.get(i) == x && yCoord.get(i) == y) {
            xCoord.remove(i);
            yCoord.remove(i);
            break; //don't remove this break if there are duplicate co-ordinates in your lists.
        }
    }
}

但是,最好为“点”创建自定义数据类型而不是像这样管理两个arraylist。

第三个arraylist保存代码,以计算哪些点可以通过
dot
从画布上删除。您是指要删除的
x
y
坐标对吗?是的,这是正确的。请提供完整的代码,而不是解释部分代码。例如,问题是:您在这些列表中存储了什么类型的对象?正如我猜想的那样:您可能错误地调用了remove(对象)而不是remove(索引)方法(或者反过来)。这可能是因为int值自动装箱到整数对象中。事实上,这里的情况很可能就是这样。最后:不要用两个列表来表示点。创建一个包含两个坐标的点类;然后使用一个这样的点对象列表。谢谢,创建一个点类很有意义,我会这样做的。
List<Dot> toRemove = dots.stream()
    .sort(comparingInt(d -> calculateDamageForDot(d)))
    .limit(numberToRemove)
    .collect(toList());
dots.removeAll(toRemove);
public void removeDots(int x, int y){
    //find that pair
    for(i=0; i<xCoord.size(); i++) {
        if(xCoord.get(i) == x && yCoord.get(i) == y) {
            xCoord.remove(i);
            yCoord.remove(i);
            break; //don't remove this break if there are duplicate co-ordinates in your lists.
        }
    }
}
...
removeDots(3, 5);
...