我有五个列表List<String>
。我想获得一个包含这些列表中所有元素的数组,从而消除了任何重新分区。什么是最好的方法呢?
`编辑:有人也可以在与List的比较中评论HashSet的性能。我担心性能,因为我在计算要在网页上显示的数据时正在做这项工作。和不。集合中的元素会在300-400左右高,哪些参数适合Set?
我在set中的元素将属于这种类型:
<HColumn<String, String>>
答案 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。