2015-08-02 3 views
2

Я делаю программу, которая отображает случайные строки из файла, но я немного новичок в arraylists. Я хочу удалить самую предыдущую случайную строку из arraylist после ее отображения, но не из файла. Это потому, что я не хочу, чтобы это повторялось. Вот мой код:Удаление последней случайной строки из 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); 

Я хочу, чтобы иметь возможность удалить «rdmln» из ArrayList после того, как он был представлен так, что она не будет отображаться снова. Заранее спасибо.

+0

Подходит ли какой-либо из подходов к работе? Если это так, вы должны отметить его как принятый –

ответ

3

Проверьте функцию remove(int index). В вашем случае:

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

remove примет его из списка и вернуть его к вам для использования.

1

Вы можете просто использовать remove() метод, который возвращает и удаляет первый экземпляр объекта указывается:

lines.remove(rdmln); 

Если вы хотели бы получить информацию от Javadocs, here's the link.

0

Удаление случайного элемента из список неэффективен. Если вы хотите получить M случайных элементов из списка из N элементов, ваш подход займет O(N * M) шагов.

Вместо этого я предлагаю прочитать весь файл, а затем перетасовать ваш список строк, используя Collections.shuffle (который примет O(N)), а затем просто отобразит первые M элементов. Это будет O(N + M), что равно O(N), так как M < = N.

Смежные вопросы