如何在ArrayList中搜索相同的元素?

时间:2016-06-30 12:56:47

标签: java list arraylist

此代码创建50个1到100之间的随机数,并将其添加到ArrayList中。 现在我想在ArrayList中搜索相同的数字,而不是删除它们并获得一个新数字。 最后,列表应该只包含50到1到100之间的唯一数字。

问题是:我不知道,如何在相同的ArrayList中搜索相同的数字,删除它并获得一个新的。 有人可以帮帮我吗?

section

5 个答案:

答案 0 :(得分:3)

Random nr = new Random();
int number;
ArrayList<Integer> liste = new ArrayList<Integer>();

// get 50 random numbers between 1 and 100
for(int counter = 1; counter <= 50; ) {
    number = 1+nr.nextInt(100);
    if(!(liste.contains(number))) {
        liste.add(number);
        counter++;
    }
}

for (int ausgabe : liste) {
    System.out.print(ausgabe+ ", ");
}

希望这会有所帮助。

答案 1 :(得分:2)

更好地使用HashSet,以避免重复:

Random nr = new Random();
int number;

Set<Integer> randomSet = new HashSet<>();

// get 50 random numbers between 1 and 100
while(randomSet.size() < 50) {
    number = 1 + nr.nextInt(100);
    randomSet.add(number);
}

for (int ausgabe : randomSet) {
    System.out.print(ausgabe + ", ");
}

答案 2 :(得分:2)

正如已经建议使用Set或者,如果插入顺序很重要,则LinkedHashSet并保持生成随机数,直到该集合的大小为50。

然而,问题可能在于,当设置填满时,您可能会获得越来越多的重复,因此需要大量重试。

所以另一种选择可能是使用100个数字的列表,然后随机取出一个数字:

List<Integer> availableNumbers = new ArrayList<>( 100 );
for( int i = 1; i <= 100; i++ ) {
  availableNumbers.add( i );
}

Random r = new Random();
List<Integer> randomizedList = new ArrayList<>( 50 );
for( int i = 0; i < 50; i++ ) {
  int randomIndex = r.nextInt( availableNumbers.size() );
  randomizedList.add( availableNumbers.remove( randomIndex ) );
}

请注意,使用ArrayList的缺点是,如果您取出一个数字,则必须将其后面的所有数字移到左侧。另一方面,使用LinkedList需要迭代才能到达应该删除的元素的索引。

答案 3 :(得分:1)

您可以使用linq查询:

liste.Distinct().ToArray();

至少应该让你朝着正确的方向前进。

答案 4 :(得分:1)

如果您不想尝试任何其他解决方案,您可以从头开始获取唯一数字,同时仍然使用像这样的ArrayList ..

Random nr = new Random();
int number;
ArrayList<Integer> liste = new ArrayList<Integer>();

// get 50 random numbers between 1 and 100
for(int counter = 1; counter <= 50; ) {
    number = 1+nr.nextInt(100);
    if(!(liste.contains(number))) {
        liste.add(number);
        counter++;
    }
    else {
        counter = counter - 1;
    }
}

for (int ausgabe : liste) {
    System.out.print(ausgabe+ ", ");
}