1

我有一个带有重复元素的ArrayListof 。Strings每 3 行构成一个实体:

2
550111.55
1、3
3
550111.55
1、2、3
2
155.55
1, 2
3
550111.55
2、3、1
2
155.55
2, 1
2
550111.55
3, 1
3
550111.55
3, 1, 2

所有元素都是Strings. 第一个数字表示参与者的数量,第二个表示价值,第三个表示组成它的元素。所以我有重复

3
550111.55
3, 1, 2

3
550111.55
1、2、3

3
550111.55
2、3、1

元素的数量表示重复的数量,因此我必须删除所有重复项,在这种情况下,删除除一个实例之外的所有实例,例如:

3
550111.55
2、3、1

我正在尝试这样做:

ArrayList<String> lista_rezultata1=new ArrayList<String>();
lista_rezultata1=lista_rezultata;
//set to count to 3 in arraylist since data I need to split and evaluate are always on the third place
int number1=0;
int number2=0;
String[] part1=null;
String[] part2=null;
int removefromlist=0;
for (int i = 0; i < lista_rezultata.size(); i++) {
    if(number1==3)number1=0;
    if(number1==2)//If it is a third element it is the one with "," that I split
    {
        part1=lista_rezultata.get(i).toString().split(",");
    }

    for (int j = 0; j < lista_rezultata1.size(); j++) {
        if(number2==3)number2=0; 

        if(number2==2 && i!=j && number1==2)//If it is a third element it is the one with "," that I split, first must already be splited
        {
            part2=lista_rezultata1.get(j).toString().split(",");

            for (int k = 0; k < part1.length; k++) {
                for (int l = 0; l < part2.length; l++) {
                    if(part1.length==part2.length)   //if they have the same number of elements
                    { 
                        if(part2[l].equals(part1[j]))
                        {
                            .....some code
                        }
                    }
                }
            }
        }

        number2=number2+1;   
    }
    number1=number1+1; 
}

所以我希望有更好的方法......

4

3 回答 3

3

恐怕你的方法全错了...

  • 创建一个类来表示您的项目
  • 如果您的项目值相同,则覆盖equals()返回的方法true
  • 覆盖该hashCode()方法以int根据您在equals()方法中比较的相同值生成一个值(因此 hashCode“同意”等于)
  • 使用 aSet<Item>保存您的项目 - 设置用于equals()确保没有重复项

您可能希望LinkedHashSet为您使用一个Set实现:

Set<Item> set = new LinkedHashSet<Item>();

ALinkedHashSet将确保其元素的迭代顺序与其插入的顺序相同。

于 2013-05-22T00:51:17.837 回答
0

如果元素部分的成员按顺序排列,那么您将拥有实际的重复项,这应该可以简化事情。

于 2013-05-22T00:44:33.090 回答
0

您可能应该使用ArrayLists代替。但是,即使您不喜欢,您也可以检查数组是否包含某个元素,如下所示:

Arrays.asList(yourArray).contains(element);
于 2013-05-22T00:45:46.283 回答