从arraylist中删除最后一个随机字符串

时间:2015-08-02 03:00:50

标签: java string arraylist line

我正在制作一个程序,显示文件中的随机行,但我对arraylists有点新鲜。我希望在显示之后从arraylist中删除最先前的随机行,但不是从文件中删除。这是因为我不希望它被重复。这是我的代码:

try {
    Random random = new Random();
    int randomInt = random.nextInt(50);
    FileReader fr = new FileReader(file);
    BufferedReader reader = new BufferedReader(new FileReader(file));
    String line = reader.readLine();
    if (line.contains("!")) {
        List<String> lines = new ArrayList<>();
        while (line != null) {
            lines.add(line);
            line = reader.readLine();
            Random r = new Random();
            String rdmln = lines.get(r.nextInt(lines.size()));
            line1.setText("Line" + rdmln);

我希望能够移除&#39; rdmln&#39;来自arraylist后显示,以便它不会再次显示。提前谢谢。

3 个答案:

答案 0 :(得分:3)

检查remove(int index)功能。在你的情况下:

//your code
String rdmln = lines.remove(r.nextInt(lines.size()));
//the rest of your code

remove会从列表中取出它并将其返回给您使用。

答案 1 :(得分:1)

您可以简单地使用remove()方法,该方法返回并删除您指定的对象的第一个实例:

lines.remove(rdmln);

如果您想要来自Javadocs的一些信息,here's the link.

答案 2 :(得分:0)

从列表中删除随机元素效率很低。如果要从N个元素列表中获取M个随机元素,您的方法将采用O(N * M)步骤。

相反,我建议您阅读整个文件,然后使用Collections.shuffle(将O(N))洗牌您的字符串列表,然后只显示前M个元素。这将是O(N + M),等于O(N),因为M&lt; = N。