Java 在点阵列列表中查找重复点

Java 在点阵列列表中查找重复点,java,android,Java,Android,我正在尝试删除两个数组列表中的所有重复点。每个列表都是通过查找哪个国家链接到哪个国家来创建的,如果它们链接到哪个国家,则会同时在两个数组中创建一个新点 这样我就可以循环两个数组的大小(或一个数组的大小),并在点之间画线 目前的问题是,它并没有删除这些点,或者它会将它们全部删除 我有以下数组 //Different values of course. Array1 = [Point[1,5]],[Point[1,5]],[Point[1,5]][Point[1,5]] Array2 = [Poin

我正在尝试删除两个数组列表中的所有重复点。每个列表都是通过查找哪个国家链接到哪个国家来创建的,如果它们链接到哪个国家,则会同时在两个数组中创建一个新点

这样我就可以循环两个数组的大小(或一个数组的大小),并在点之间画线

目前的问题是,它并没有删除这些点,或者它会将它们全部删除

我有以下数组

//Different values of course.
Array1 = [Point[1,5]],[Point[1,5]],[Point[1,5]][Point[1,5]]
Array2 = [Point[1,5]],[Point[1,5]],[Point[1,5]][Point[1,5]]
以下是删除重复阵列的代码:

private ArrayList<ArrayList<Point>> checkDuplicatePoints(ArrayList<Point> Array1, ArrayList<Point> Array2)
{
    for(int index1 = 0; index1 < Array1.size(); index1++)
    {
        for(int index2 = 0; index2 < Array2.size(); index2++)
        {
            //So not the same position in the list.
            if(index1 != index2)
            {
                if(
                    Array1.get(index1).x == Array2.get(index2).x &&
                    Array1.get(index1).y == Array2.get(index2).y
                )
                {
                    Array1.remove(index1);
                    Array2.remove(index2);
                    checkDuplicatePoints(Array1, Array2);
                }
            }
        }
    }

    ArrayList<ArrayList<Point>> n2DPointArray = new ArrayList<ArrayList<Point>>();

    n2DPointArray.add(Array1);
    n2DPointArray.add(Array2);

    return n2DPointArray;
}
专用ArrayList检查重复点(ArrayList Array1,ArrayList Array2)
{
对于(int index1=0;index1
将它们放入一个文件夹中。集合不允许重复条目

编辑: 另一种可能性是:首先不要添加它们

void addPoint( Point newPoint )
{
    if( !array1.contains(newPoint) )
    {
        array1.add(newPoint);
    }
}
还有一个编辑:

现在更清楚了:为什么不为此创建自己的数据结构呢。让我们称之为
CountryLink


它将有两个
s并覆盖
equals()
,因为如果它的两个实例具有相同的两点,则它返回true,无论是作为开始还是结束。然后,您可以轻松地将其放入如上图所示的ArrayList中。或者放入一个自动拒绝重复项的集合。

如果我正确理解了您的问题,我不确定,但这里有一个制作列表的解决方案,它只包含不同的元素(效率不高):


我想我不明白你的想法,但为什么不使用迭代器呢

例如:

for (Iterator iter = yourList.iterator(); iter.hasNext(); )
 {
    Object item = iter.next();

    if (YOUR_CONDITION_HERE)
    {
        iter.remove();
    }
}

据我所知,您的问题可能是您应该研究这些代码和示例

public class test {
public static void main(String ap[])
{

    List<Point> mList1 =new ArrayList<Point>();
    List<Point> mList2 =new ArrayList<Point>();
    Point mPoint1 = new Point(1, 2);
    Point mPoint2 = new Point(2, 3);

    for (int i=0;i<3;i++){
        mList1.add(mPoint1);
        mList1.add(mPoint2);
    }
    Point mPoint3 = new Point(1, 2);
    Point mPoint4 = new Point(3, 4);

    for (int i=0;i<2;i++){
        mList2.add(mPoint3);
        mList2.add(mPoint4);
    }

    System.out.println(mList1);
    //System.out.println(mList2);
    new test().removingDuplicatesQID(mList1, mList2);
    System.out.println(mList1);
}
public void removingDuplicatesQID(List<Point> list1,List <Point> list2)
{
    Set<Point> uniqueEntries = new HashSet<Point>();
    for (Iterator iter = list1.iterator(); iter.hasNext();)
    {
        Point element = (Point) iter.next();
        if (!uniqueEntries.add(element))
            /* if current element is a duplicate, remove it */
            iter.remove();
    }
    uniqueEntries.clear();
}
}
[java.awt.Point[x=1,y=2],java.awt.Point[x=2,y=3],java.awt.Point[x=1,y=2],java.awt.Point[x=2,y=3],java.awt.Point[x=1,y=2],java.awt.Point[x=2,y=3]]

//从arrayList1中删除副本后

        System.out.println(mList1);
[java.awt.Point[x=1,y=2],java.awt.Point[x=2,y=3]]


我希望这能帮助您,或者..或者更具体地针对您的问题和数组列表中需要的结果

如果您不关心更改ArrayList中元素的顺序,您可以对其进行排序并快速删除重复项。听起来像是在创建图形。作为另一种解决方案,您可能需要研究图形的标准编程数据结构。我不是在创建图形,它是用于实际显示地图上的链接。顺序必须相同:-(以你在问题中提供的两个数组为例,每个数组应该只剩下一个点还是一个点?不清楚你想实现什么。@AbakizMyth这种带有链接的结构称为a。如果你不熟悉图论,很容易将其与代数中的点、线、曲线等相混淆。图形数据结构是虚拟的ry在计算机编程中很常见,是一个非常有用的工具。你能有一组点吗?是的,你可以。但我不确定这是否是你想要的。我以为你想删除每个数组中的重复项。但是你的代码似乎做了一些非常不同的事情。我们能假设1。两个数组在开始时的大小相同吗?2。“复制品”是否有一个点在Array1和Array2中,但不在同一索引中?数组大小相同,包含不同的点。我们想知道数组中相同位置的点是否与另一位置的点不相同。@Vipin Sahu:他有一个有向图列表,想忽略方向。然后a->B和B->a将是“相同的”,因此是重复的。他想消除这些。这将对点起作用?它如何匹配Point.x和Point.y?如果我没有弄错的话,Point有一个重写的equals()方法。它将一个点与另一个点进行比较,如果它们的x和y坐标匹配,则返回true。列表的containts()方法检查列表是否正确使用此equals()函数“包含”某些内容。您是否使用java.awt.Point类?如果没有,请再次检查答案您是否迭代这两个列表并删除其中的重复项?是的,请参阅我答案中的注释。如果您愿意,我可以给您我的国家/地区链接器代码?我正在努力实现这一点,但它不起作用:-(当然……并给出必要的解释、细节和输出,以便我能深入了解您的问题并尝试解决。。。。。。。。。。。
for (Iterator iter = yourList.iterator(); iter.hasNext(); )
 {
    Object item = iter.next();

    if (YOUR_CONDITION_HERE)
    {
        iter.remove();
    }
}
public class test {
public static void main(String ap[])
{

    List<Point> mList1 =new ArrayList<Point>();
    List<Point> mList2 =new ArrayList<Point>();
    Point mPoint1 = new Point(1, 2);
    Point mPoint2 = new Point(2, 3);

    for (int i=0;i<3;i++){
        mList1.add(mPoint1);
        mList1.add(mPoint2);
    }
    Point mPoint3 = new Point(1, 2);
    Point mPoint4 = new Point(3, 4);

    for (int i=0;i<2;i++){
        mList2.add(mPoint3);
        mList2.add(mPoint4);
    }

    System.out.println(mList1);
    //System.out.println(mList2);
    new test().removingDuplicatesQID(mList1, mList2);
    System.out.println(mList1);
}
public void removingDuplicatesQID(List<Point> list1,List <Point> list2)
{
    Set<Point> uniqueEntries = new HashSet<Point>();
    for (Iterator iter = list1.iterator(); iter.hasNext();)
    {
        Point element = (Point) iter.next();
        if (!uniqueEntries.add(element))
            /* if current element is a duplicate, remove it */
            iter.remove();
    }
    uniqueEntries.clear();
}
}
    System.out.println(mList1);
        System.out.println(mList1);