从ArrayList中删除重复的字符串

时间:2013-05-22 00:40:07

标签: java

我有ArrayList 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; 
}

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

3 个答案:

答案 0 :(得分:3)

你的做法是错的我害怕...

  • 创建一个代表您的项目的课程
  • 如果您的商品值相同,则覆盖返回equals()的{​​{1}}方法
  • 覆盖true方法,根据您在hashCode()方法中比较的相同值生成int值(因此hashCode&#34;同意&#34;等于)< / LI>
  • 使用equals()保存您的商品 - 设置使用Set<Item>以确保没有重复项

您可能希望equals()实施Set

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

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

答案 1 :(得分:0)

如果元素部分的成员按顺序排列,那么你就会有实际的重复,这样可以简化事情。

答案 2 :(得分:0)

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

Arrays.asList(yourArray).contains(element);