Java中有链表的快速concat方法吗?

我怎样才能通过jdk1.6,谷歌或Apache公共收集或任何其他与Java的O(1)连接两个链接列表? 例如在jdk中,只有addAll方法是O(n)。

我错过的另一个特点是连接两个列表,其中每个列表可能是相反的顺序。 为了说明这个假设,假设两个列表a-> b-> c和e-> f-> g可以合并到一起

  • A-> B-> C-> E-> F->克
  • A-> B-> C-> G-> F->电子
  • C-> B-> A-> E-> F->克
  • C-> B-> A-> G-> F->电子
  • 你知道这样的列表实现还是必须实现我自己的链表? 知道如何调整现有的解决方案也是有帮助的(例如,jdk LinkedList只有很多私有方法)。 这些功能在我看来非常明显,希望我不会错过一些愚蠢的东西。

    正如MicSim指出的那样,在Java中定时合并两个列表是相关的,但不是真正的重复! 现在的问题是:

  • 是否有可能与其他收集库?
  • 如何连接反向?

  • 如果你愿意解决Iterable结果,你可以使用谷歌集合Iterables.concat和Iterables.reverse

    http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html

    public static <T> Iterable<T> concat(Iterable<? extends T> a,
                                     Iterable<? extends T> b)
    
    public static <T> Iterable<T> concat(Iterable<? extends T> a,
                                     Iterable<? extends T> b,
                                     Iterable<? extends T> c)
    
    public static <T> Iterable<T> concat(Iterable<? extends T> a,
                                     Iterable<? extends T> b,
                                     Iterable<? extends T> c,
                                     Iterable<? extends T> d)
    
    public static <T> Iterable<T> concat(Iterable<? extends T>... inputs)
    
    public static <T> Iterable<T> concat(Iterable<? extends Iterable<? extends T>> inputs)
    

    我目前看到的唯一解决方案是实现List,制作一个构造函数,如:

    public EnhancedList (List l1, List l2)
    

    并覆盖所有方法。 在这样的解决方案中,您是否想要连接LinkedList或任何其他列表并不重要。


    我认为用任何类型的基本列表结构编写都不会太困难,因为在链接列表的中间或列表末尾插入O(1)。

    链接地址: http://www.djcxy.com/p/3361.html

    上一篇: Is there a fast concat method for linked list in Java?

    下一篇: Are Memory Leaks Possible in Java?