[英]how to search for the same element in an ArrayList?
此代碼創建50個1到100之間的隨機數,並將其添加到ArrayList中。 現在我想在ArrayList中搜索相同的數字,而不是刪除它們並獲得一個新數字。 最后,列表應該只包含50到1到100之間的唯一數字。
問題是:我不知道,如何在相同的ArrayList中搜索相同的數字,刪除它並獲得一個新的。 有人可以幫幫我嗎?
import java.util.Random;
import java.util.ArrayList;
class RandomPrim {
public static void main(String[] args) {
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; counter++) {
number = 1+nr.nextInt(100);
liste.add(number);
// System.out.println(liste.toString());
}
for (int ausgabe : liste) {
System.out.print(ausgabe+ ", ");
}
}
}
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+ ", ");
}
希望這可以幫助。
最好更好地使用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 + ", ");
}
正如已經建議使用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
需要迭代才能到達應該刪除的元素的索引。
您可以使用linq查詢:
liste.Distinct().ToArray();
這至少應該讓你朝着正確的方向前進。
如果你不想嘗試任何其他解決方案,你可以從頭開始獲取唯一的數字,同時仍然使用像這樣的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+ ", ");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.