Java 从Arraylist中删除整数

Java 从Arraylist中删除整数,java,random,arraylist,Java,Random,Arraylist,我试图为我的Bingo程序消除重复项,所以我创建了一个ArrayList,我想删除循环中打印出来的整数。我认为我使用的循环是错误的,但我不确定 List<Integer> list = new ArrayList<Integer>(); for(int i = 1; i <= 75; i++){ list.add(i); }

我试图为我的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(//);
                }
我建议使用不允许重复的哈希集:

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

如果要删除所有整数,只需执行以下操作就会容易得多:

Collections.shuffle(list);
for (Integer s : list) {
    System.out.println(s);
}
list = new ArrayList<Integer>();
只创建一个新的数组列表更有效,因为它允许垃圾收集器只收集整个旧列表,而不是逐个删除条目。但是,如果对同一实例有多个引用,则需要实际清除列表

还要注意,洗牌调用已经移到循环之外。一旦你做了一次洗牌,名单已经随机,所以再次洗牌是没有意义的。。。如果你真的想要一个更好的洗牌,你可以在第一个循环之前调用洗牌7次。

这样做

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

你确定这不是你需要的吗

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());

迭代列表时不要修改它。使用迭代器。如果您不想要重复项,请使用集合。按照您构建列表的方式,将不会有任何重复项需要删除。您尝试执行的操作没有多大意义。在这里,你最好只说集合;对于整数s:list{System.out.printlns;}list.clear;。最后一句话只有在块没有结束的情况下才有必要。你认为什么是集合。shuffledoos?作为旁注,即使shuffle不强制ConcurrentModificationException,一些实现也可能会绕过这一点,因为出于性能原因,应该避免每次迭代都进行shuffle。多次洗牌不会增加随机性。这确实是一种测试方法。我的问题中应该包括它,但我有一个呼叫按钮,如果单击该按钮,将显示一个随机号码,我希望所有75个呼叫号码都不同:l@HassaanHafeez-那么,你的问题实际上与你发布的问题完全不同?这有什么意义?您可能应该发布一个新问题。这很有效,但从ArrayList的开头删除不是最佳做法,尤其是在应用于所有元素时。您是对的,我认为这是一个新手问题,因此我根据OP的原始逻辑更改了代码,以便更好地理解。是的,但是使用list.removelist.size-1不会改变语义。添加一条注释,说明为什么删除列表元素会给新手更多的学习机会。@Holger,等等。现在我想起来了,从列表的开头或结尾删除没有区别;在内部,arraycopy必须在每次删除后将所有元素复制到新数组中。为什么删除单个项会导致ArrayList创建新数组?删除最后一项不会复制任何内容。为什么要使用list.removeAllArrays.asLists;什么时候可以直接调用list.clear?@DaoWen如果我需要调用list.clear,那么我将执行list=new ArrayList;。您知道正确的列表。清除!=列表removeAll@ByteCode:因为s不是数组,我想你是指其他数组。list.clear和list.removeAllArrays.asListsome_数组之间的主要区别在于后者创建了一个不必要的列表,并且还需要创建一个不必要的数组才能编译。@cHao list.removeAllArrays.asLists;如果他想搬走duplicates@ByteCode当前位置问题是,没有重复的。该列表包含从1到75的75个唯一整数。
    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());