如何比较arraylist与list <string []> java </string []>

时间:2013-07-06 10:10:27

标签: java

    List<String[]> sarray;
    ArrayList<ContentTable> currentData=new ArrayList<ContentTable>();

    //here sarray is initialized with data
    sarray = reader.readAll();


    for(String[] arr : sarray) 
        {
          System.out.println("array data "+ Arrays.toString(arr));
        }

        for(ContentTable ct : currentData)
        {
            System.out.println("list data "+ct.getId() +" "+ ct.getSubid() +" "+ct.getChpid()+" "+ct.getSec_name()+" "+ct.getContent());
        }   

输出数组和列表的1个结果:

数组数据 - &gt; [9, 10, 83, Concepts: 1-10, <p>We&#x2019;ll discuss many of the concepts in this chapter in depth later. But for now, we need a brief review of these concepts to equip you for solving exercises in the chapters that follow.</p>]

列出数据 - &gt; 9 10 83 Concepts: 1-10 <p>We&#x2019;ll discuss many of the concepts in this chapter in depth later. But for now, we need a brief review of these concepts to equip you for solving exercises in the chapters that follow.</p>

 //fields with getters and setters in ContentTable Class
        public class ContentTable {

            int id;
            int subid;
            int chpid;
            String sec_name;
            String content;
          }

现在我想要实现的是创建两个列表,

ArrayList<ContentTable> updatedData=new ArrayList<ContentTable>();
ArrayList<ContentTable> addedData=new ArrayList<ContentTable>();

这些将在sarraycurrentdata进行比较之后填充数据,

如果ct.getSec_name()中特定索引处的ct.getContent()currentdatasarray中的数据不相等,那么它将被添加到updatedData < / p>

如果特定索引处的ct.getId()ct.getSubid()ct.getChpid()不等于任何sarray数据,则会将其添加到addedData

以较低的复杂度执行此操作的优雅方法是什么?我希望最快速地执行此操作,因为可能需要一段时间来比较Arraylist currentData中的每个元素以与ArrayList sarray中的每个元素进行比较。

2 个答案:

答案 0 :(得分:0)

如何将数组中的每个元素包装到Content。现在将这些内容对象添加到Set。迭代ArrayList并对于数组列表中的每个元素,检查它是否存在于集合中。如果没有更新addedData。如果是,请获取该对象并使用equals比较两个内容对象。

请注意,无论如何都要覆盖hashCode并在Content类型中等于使(Set)工作。

您在开始时进行的一次性活动需要时间,即准备就绪。但是一旦这个设置准备就绪,那么看起来非常快。

答案 1 :(得分:0)

因此,对我的问题更好的解决方案是不将List<String[]>ArrayList进行比较,而是将List<String[]>转换为另一个Arraylist,然后比较新的Arraylist 1}}对抗旧的。我发现,这是一种非常简单易行的方法。

                for(String[] arr : sarray) 
                {
                  ContentTable data=new ContentTable();

                  for(String s : arr)   
                  {
                         data.setId(Integer.parseInt(s));
                         data.setSubid(Integer.parseInt(s));
                         data.setChpid(Integer.parseInt(s));
                         data.setSec_name(s);
                         data.setContent(s);
                  }
                  newData.add(data);
                }

现在,newData正在使用我想要与currentData进行比较的新数据。