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