如何在随机选择后从数组中删除字符串? Java的

时间:2013-02-20 06:48:23

标签: java arrays string random

我是从一个数组中随机选择一个字符串,在选中它之后我想这样做,以便我不能再选择那个字符串。我应该“删除”它还是有更好的方法?

这是我随机选择的代码,

position = positionList[(int) (Math.random() * positionList.length)];

4 个答案:

答案 0 :(得分:5)

如果您使用ArrayList而不是array,则删除会是更好的选择。因为在数组的情况下,你必须重新调整它的大小(这意味着你必须每次都创建一个新的数组 - 致命的想法。避免它),或者将选择的索引设置为{{ 1}}。

但是这种方法(设置null)的问题在于,您可能需要多次进行随机选择才能获得一个有效的随机索引,尤其是当您只剩下null个有效索引时。因此,最好使用1,并从中删除所选元素。

List

请注意,如果您想要原来的List<String> list = new ArrayList<String>(); // Populate your list. Collections.shuffle(list); // Shuffle the list. String random = list.remove(0); // Will remove the first element ,稍后一个,那么可能您可以复制它。

答案 1 :(得分:3)

最简单的方法是

positionList[(int) (Math.random() * positionList.length)] = null;

但这似乎更接近你想要的

    String[] a = { "1", "2", "3", "4" };
    List<Integer> positions = new ArrayList<>(a.length);
    for (int i = 0; i < a.length; i++) {
        positions.add(i);
    }
    Collections.shuffle(positions);
    while(!positions.isEmpty()) {
        int i = positions.remove(positions.size() - 1);
        System.out.println(i);
    }

答案 2 :(得分:0)

我说你基本上有三个选择。

  1. 不要使用数组。你可以使用一个列表,它可以让你轻松删除元素
  2. 按照其他答案中的建议将数组元素设置为null
  3. 在某种数据结构中跟踪您目前所选择的数组位置,并在每次生成随机数时进行检查。

答案 3 :(得分:0)

首先,您需要了解Java中的数组具有不可变长度。如果创建一个包含5个元素/槽的数组,它将始终具有5个元素。你无法改变它。

所以你实际上无法删除数组的第i个元素。您可以做的是以下之一:

  • 您可以将位置i的元素设置为null(假设这是一个对象数组)。

  • 您可以创建一个新阵列,该阵列由旧阵列的元素组成,而不是您正在“删除”的元素。但请注意,您并非实际更改原始数组。

还有第三种选择。根本不要使用数组。请改用List;例如一个ArrayListLinkedList取决于您的应用程序的要求。 API允许您向列表添加元素并从列表中删除元素......还有更多。

(使用ArrayList而不是数组的缺点是前者占用的空间略小,而且速度稍慢。但是除非空间使用和/或性能 critical < / em>对您的申请的关注。)