gpt4 book ai didi

java - 添加期间列表中的随机元素

转载 作者:行者123 更新时间:2023-12-01 09:15:35 25 4
gpt4 key购买 nike

我的代码中有 20 个名字。我的函数有 2 个选项可以将元素添加到我的列表中:

1.

将所有 20 个名称插入列表:

public void addNames() {
list.add("name1");
list.add("name2");
...
list.add("name20");
}

2.

仅将 5 个随机名称(从 20 个名称中)添加到列表中。为了做到这一点,我想了两种方法。从 20 个名字中随机抽取 5 个名字的最佳方法是什么?也许你有更好的方法。

A.

使用一组随机索引(每个值都在 0 到 19 之间,因为有 20 个名称),在“添加”之前,我将通过某个计数器检查是否添加它们:

public void addNames() {
// adding 5 random indices between 0 to 19 to the set
Set<Integer> set = new HashSet<Integer>();
Random r = new Random();
Set<Integer> indices = new HashSet<>(numRandomNames); //==5
for (int i = 0; i < numRandomNames; ++i) {
int index = r.nextInt(numNames - 0); //==19
indices.add(index);
}

int counter = 0;
if (indices.contains(counter)) {
list.add("name1");
}
counter++;
if (indices.contains(counter)) {
list.add("name2");
}
counter++;
if (indices.contains(counter)) {
list.add("name3");
}
...
}

B.

RandomList 扩展了 List 并覆盖“add”函数,与“A.”执行相同的操作,但覆盖“add”将决定是否在函数内添加值,因此我的函数将看起来与1.相同,带有覆盖“添加”功能

您认为有更好的解决方案吗?如果不是,那么哪一个更好? (A还是B?)。我刚刚看到人们建议不要扩展java集合,但我认为这是这两个解决方案中最好的解决方案。

注意

====

我的代码可以有 10000 个名称或更多,所以我不想将所有 10,000 个名称添加到此\其他列表,然后将其中的 5 个随机添加到其他列表。我更喜欢在添加期间执行此操作,以避免列表中的许多位置,而我并不真正需要它们。

编辑

对 ProgrammerTrond 的回答:

我不确定我会这样做,但我要求我展示的是我对 2.B 的建议:

public class RandomList<Integer> implements List<Integer> {
private int addCallsCounter;
private Set<Integer> setIndices = null;

public RandomList(final int numElements, final int maxVal, final int minVal) {
addCallsCounter = 0;
setIndices = new HashSet<Integer>(numElements);
Random r = new Random();
while (setIndices.size() < numElements) {
int index = r.nextInt(maxVal - minVal + 1) + minVal;
if (setIndices.contains(index) == false) {
setIndices.add(index);
}
}
}

@Override
public boolean add(Integer object) {
if (setIndices.contains(addCallsCounter++)) {
this.add(object);
return true;
}
return false;
}
}

从我的代码中我将这样做:

RandomList randList = new RandomList(5);
randList.add("name1");
randList.add("name2");
randList.add("name3");
...
randList.add("name19");
randList.add("name20");

但我的问题是我需要实现 List pfff 的许多抽象方法。 RandomList 也不能​​是抽象的,因为那样它就无法实例化。

最佳答案

试试这个:

List<Integer> index = new ArrayList<>();
List<String> five_names = new ArrsyList<>();
List<String> allnames = new ArrayList<>();

存储五个随机值

for(int i = 0;i < 5;i++){

int index_no = getrandomNumber();
index.add(index_no);
five_names.add(allnames.get(index_no));
}

getRandomNumber 方法:

public int getRandomNumber(){

Random rnd = new Random();
int x = rnd.nextInt(20);

if(index.contains(x)){
return getRandomNumber();
}else{
return x
}
}

关于java - 添加期间列表中的随机元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40562654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com