将列表合并为具有唯一元素的单个数组

时间:2011-02-20 12:55:20

标签: java

我有五个列表List<String>。我想获得一个包含这些列表中所有元素的数组,从而消除了任何重新分区。什么是最好的方法呢?

`编辑:有人也可以在与List的比较中评论HashSet的性能。我担心性能,因为我在计算要在网页上显示的数据时正在做这项工作。和不。集合中的元素会在300-400左右高,哪些参数适合Set?

我在set中的元素将属于这种类型: <HColumn<String, String>>

5 个答案:

答案 0 :(得分:9)

Set<String> set = new HashSet<String>();
set.addAll(list1);
...
set.addAll(list5);
String[] str = set.toArray(new String[0]);

答案 1 :(得分:3)

您可以将列表内容添加到Set

  

包含否的集合   重复元素。更正式的,   集合不包含元素对e1   和e2使得e1.equals(e2)和at   大多数一个null元素。正如所暗示的那样   它的名字,这个界面模型   数学集抽象。

然后,您可以通过调用Set.toArray()来获取数组。

标准集不会保留顺序,但会删除重复项。

答案 2 :(得分:2)

创建HashSet并使用您的列表调用addAll

答案 3 :(得分:1)

在采访中向我询问了同样的问题,但结合了两个向量而没有重复共同对象,也没有使用集合框架方法。

package com.pra.sss;
/*
 * Vector v1 and V2 contain some common objects
 * Create vector V3 which will contain all V1 and V2 
 * and common objects only once 
 * without using colletion framework functions 
 */import java.util.Vector;

public class VectorTest {
public static void main(String[] args) {
   Vector<String> v1 = new Vector<String>();
   Vector<String> v2 = new Vector<String>();
   Vector<String> v3 = new Vector<String>();
   /*Vector v1*/
   v1.add("A");
   v1.add("B");
   v1.add("C");
   v1.add("D");
   /*Vector v2*/
   v2.add("W");
   v2.add("B");
   v2.add("C");
   v2.add("Z");

   System.out.println("V1"+v1);
   System.out.println("V2"+v2);

   for(String ss : v1) {
       v3.add(ss);
   }

   for (int i = 0; i < v1.size(); i++) {
       for (int j = i; j < v2.size(); j++) {
           if(v1.get(i).equals(v2.get(j))) {
               break;
           }
           else{
               v3.add(v2.get(j));
               break;
           }
    }
  }
   System.out.println("v3:"+v3);
}
}

/*
output
V1[A, B, C, D]
V2[W, B, C, Z]
v3:[A, B, C, D, W, Z]
*/

答案 4 :(得分:0)

合并列表的最佳方法取决于您是否需要具有相同的元素顺序。 ID。元素第2列之前的元素。

在@JohanSjöberg解决方案中,它使用了HashSet。元素以无特定顺序返回。如果您想要保存相同的订单,请使用具有可预测迭代顺序的集合,例如LinkedHashSet。