我在java中使用了arraylist,我需要在10次迭代中添加整数(整数是从名为arrint的整数数组中随机获得的),没有任何重复:
for (int i =0; i<10; ++i)
array.add(integer);
然后在20次迭代期间为相同的整数数组(arrint)添加相同的数组20个其他整数而不重复
for (int i =0; i<10; ++i)
array.add(integer);
但允许在10个第一个整数和20个整数之间重复。
谢谢
答案 0 :(得分:10)
Set
,而不是List
,可以防止重复。因此,您可以建立Set<Integer>
并在填充之后,将其所有元素添加到列表中(使用list.addAll(set)
)。然后清除Set
并重复下一个20。
从您的描述中不清楚如果遇到重复,您希望发生什么。是否要将项目添加到Set
中,直到它包含10,只是丢弃重复项?或者如果遇到重复,你想抛出异常吗?
答案 1 :(得分:6)
public class Foo {
private final Random random = new Random();
public List<Integer> createList() {
// Create empty list to store results.
List<Integer> ret = new ArrayList<Integer>(30);
// Add 10 randomly generated integers.
ret.addAll(createRandomIntegers(10));
// Add another 20 randomly generated integers which could potentially
// contain integers already added previously (the OP states that this is ok).
ret.addAll(createRandomIntegers(20));
return ret;
}
/**
* Utility function that creates a set of randomly generated
* integers of specified size. We use a Set to avoid duplicates.
*/
protected Set<Integer> createRandomIntegers(int sz) {
Set<Integer> ret = new HashSet<Integer>();
while (ret.size() < sz) {
ret.add(random.nextInt());
}
return ret;
}
}
答案 2 :(得分:1)
我个人会使用一个集合作为每个集合的中间体,不允许重复,然后将其全部添加到列表中。它远不是最“OMG OPTIMIZED”解决方案,但它对未来的读者来说非常清楚它的作用。
List<Integer> list = new ArrayList<Integer>();
Set<Integer> subSet = new HashSet<Integer>();
for (int i =0; i<10; ++i) {
subSet.add(integers10[i]);
}
list.addAll(subSet);
subSet.clear();
for (int i =0; i<20; ++i) {
subSet.add(integers20[i]);
}
list.addAll(subSet);
subSet.clear();
答案 3 :(得分:1)
我理解你需要一个List(因为你需要按顺序保存元素)并且还想要一个set的功能 - 防止重复。
因此,您可以编写自己的类(比如SetList<E>
),它将继承ArrayList<E>
并实现Set<E>
接口。为此,您可以将HashSet<E>
作为班级SetList<E>
的属性。像这样:private Set<E> set = new HashSet<E>();
然后只需将插入和删除与属性中的集同步,如果集已经包含插入的元素,则不要插入它。最重要的方法add(E element)
就像:
public void add(E element){
if(set.contains(element)){
return;
}
set.add(element);
super.add(element);
}
对于其他方法,它将是类似的。
我前段时间做过这个,但后来我找到了更好的解决方案:GlazedLists。 免费图书馆可以完成所有这些工作。我建议你使用UniqueList。
答案 4 :(得分:0)
Apache的Java Collections项目通常有代码来执行Java语言忘记的大多数常见任务。这是其中之一:
org.apache.commons.collections.list.SetUniqueList中的