假设我有一个字符串链表。打印这个链表最有效的方法是什么?
与任何列表或数组相同:循环遍历元素并依次打印每个元素。O (n) .
@Thilo是正确的。显而易见的解决方案是正确的……只要你不以消极的方式格式化字符串(例如,通过附加到一个大字符串),或者隐式地过多刷新输出。
但是另一件需要说明的事情是:
不要纠结于性能/效率。
大多数时候,像这样的东西的性能/效率并不重要。在这种情况下,除非您犯了严重的错误,否则格式化列表所花费的时间相对于输出字符所花费的时间可能很小,而与运行整个程序所花费的时间相比则很小。
有一个公平的机会,你实际上花了更多的时间思考这个问题,而不是将节省…对于等待计算机给他们答案的最终用户。性能可以很重要。但在这里,它不太可能是重要的。最好只在有证据表明需要付出努力时才花精力使事情更快。首先让程序工作,配置它,然后再决定优化它是否有任何价值。
您可以首先将LinkedList
转换为数组(使用.toArray(new String[0])
),然后使用Arrays.deepToString()打印它
Arrays.deepToString(convertedArray);
Java集合实现了特定于数据结构的优化迭代器。特别是对于LinkedList
,迭代器保留一个指向最后返回元素的指针,以允许next()
和previous()
的常量时间操作。
另一方面,如果你想打印并控制每个元素,最好的方法是使用缓冲区。
PrintWriter out = new PrintWriter(System.out, false); // autoFlush false
// for-each or iterator
// out.print(obj);
out.flush(); // flush to the output
如果您只使用System.out
,那么每个操作都将立即发送到输出,这可能很慢。您是否看到在某些应用服务器中禁用或更改日志级别以获得更好的性能?