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);