我正在制作一个程序,显示文件中的随机行,但我对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后显示,以便它不会再次显示。提前谢谢。
答案 0 :(得分:3)
检查remove(int index)
功能。在你的情况下:
//your code
String rdmln = lines.remove(r.nextInt(lines.size()));
//the rest of your code
remove
会从列表中取出它并将其返回给您使用。
答案 1 :(得分:1)
答案 2 :(得分:0)
从列表中删除随机元素效率很低。如果要从N个元素列表中获取M个随机元素,您的方法将采用O(N * M)
步骤。
相反,我建议您阅读整个文件,然后使用Collections.shuffle
(将O(N)
)洗牌您的字符串列表,然后只显示前M个元素。这将是O(N + M)
,等于O(N)
,因为M&lt; = N。