创建唯一值的 ArrayList

新手上路,请多包涵

我有一个 ArrayList 其值取自文件(很多行,这只是一个摘录):

 20/03/2013 23:31:46 6870    6810    6800    6720    6860    6670    6700    6650    6750    6830    34864   34272
20/03/2013 23:31:46 6910    6780    6800    6720    6860    6680    6620    6690    6760    6790    35072   34496

其中每行的前两个值是包含数据并存储在单个元素中的字符串。

我想要做的是比较字符串数据元素并删除,例如,第二个和该行中引用的所有元素。

目前,我使用了 for 循环,该循环每 13 个元素比较字符串(以便仅比较数据字符串)。

我的问题:我可以实施其他更好的解决方案吗?

这是我的代码:

 import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
    public static void main(String[] args) throws Exception{

        //The input file
        Scanner s = new Scanner(new File("prova.txt"));

        //Saving each element of the input file in an arraylist
        ArrayList<String> list = new ArrayList<String>();
        while (s.hasNext()){
            list.add(s.next());
        }
        s.close();

        //Arraylist to save modified values
        ArrayList<String> ds = new ArrayList<String>();

        //
        int i;
        for(i=0; i<=list.size()-13; i=i+14){

            //combining the first to values to obtain data
            String str = list.get(i)+" "+list.get(i+1);
            ds.add(str);
            //add all the other values to arraylist ds
            int j;
            for(j=2; j<14; j++){
                ds.add(list.get(i+j));
            }

            //comparing data values
            int k;
            for(k=0; k<=ds.size()-12; k=k+13){
                ds.get(k); //first data string element
                //Comparing with other strings and delete
                //TODO
            }
        }
    }
}

原文由 alessandrob 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

创建唯一值的 Arraylist

您可以使用 Set.toArray() 方法。

不包含重复元素的集合。更正式地说,集合不包含一对元素 e1 和 e2 使得 e1.equals(e2),并且最多包含一个空元素。正如它的名字所暗示的,这个接口模拟了数学集合抽象。

http://docs.oracle.com/javase/6/docs/api/java/util/Set.html

原文由 Dmitry Zagorulkin 发布,翻译遵循 CC BY-SA 3.0 许可协议

在添加新元素之前,尝试使用 ArrayList 上的 .contains() 方法检查重复项。

它看起来像这样

   if(!list.contains(data))
       list.add(data);

这应该可以 防止列表中出现重复项,也不会像人们希望的那样弄乱元素的顺序

原文由 Anudeep Bulla 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题