簡體   English   中英

從Arraylist中刪除整數

[英]Removing Integer from Arraylist

我試圖消除我的Bingo程序的重復項,所以我創建了一個ArrayList,我想刪除循環中打印出的整數。 我認為我使用的循環是錯誤的,但我不確定。

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

                for (Integer s : list) {
                    Collections.shuffle(list);
                    System.out.println(s);
                    list.remove(//);
                }

如果要刪除所有整數,只需執行以下操作會容易得多:

Collections.shuffle(list);
for (Integer s : list) {
    System.out.println(s);
}
list = new ArrayList<Integer>();

或者,如果您確實想保留相同的列表實例:

Collections.shuffle(list);
for (Integer s : list) {
    System.out.println(s);
}
list.clear();

僅創建一個新的數組列表會更有效,因為它允許垃圾收集器僅收集整個舊列表,而不是一個一個地刪除條目。 但是,如果您對同一實例有多個引用,則實際上需要清除該列表。

另請注意, shuffle調用已移至循環之外。 一旦完成一次隨機播放,列表就已經是隨機的,因此再次隨機播放是沒有意義的...如果您確實想要“更好的”隨機播放,則可以在第一個循環之前執行7次調用shuffle

這樣吧

for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext();) {
      Integer s = iterator.next();
      System.out.println(s);
      iterator.remove();
 }

我建議使用不允許重復的HashSet<Integer>

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

您確定這不是您所需要的嗎?

private static final int NUM_BALLS = 75;

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

Collections.shuffle(list);

while (!list.isEmpty()) {
    Integer s = list.remove(list.size() - 1); // for better performance as noted by @Holger
    System.out.println(s);
}

使用以下代碼

    Random generate = new Random();
    Set<Integer> set = new HashSet<Integer>();
    for(int i = 1; i <= 75; i++){
       set.add(generate.nextInt(75));
    }
    Iterator<Integer> iterator = set.iterator();
    while(iterator.hasNext()){
        System.out.println(iterator.next());
        iterator.remove();
    }
    System.out.print(set.size());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM