Time complexity of JavaConverters asScala method

后端 未结 1 1565
既然无缘
既然无缘 2021-01-07 23:24

Starting with Scala version 2.9 there exists a handy converter to convert from java.util.List and other collections to Scala\'s data structures by writing somet

1条回答
  •  北海茫月
    2021-01-08 00:02

    Various JavaConverters classes are using Adapter pattern to wrap original Java collection (underlying) and provide Scala interface. Thus both converting and accessing converted collections is constant in time (O(1)) introducing only minor overhead.

    For instance this is the full source code of JListWrapper:

    case class JListWrapper[A](val underlying : java.util.List[A]) extends mutable.Buffer[A] {
        def length = underlying.size
        override def isEmpty = underlying.isEmpty
        override def iterator : Iterator[A] = underlying.iterator
        def apply(i : Int) = underlying.get(i)
        def update(i : Int, elem : A) = underlying.set(i, elem)
        def +=:(elem : A) = { underlying.subList(0, 0).add(elem) ; this } 
        def +=(elem : A): this.type = { underlying.add(elem); this }
        def insertAll(i : Int, elems : Traversable[A]) = { val ins = underlying.subList(0, i) ;  elems.seq.foreach(ins.add(_)) }
        def remove(i : Int) = underlying.remove(i)
        def clear = underlying.clear
        def result = this
    }
    

    Also note that converting Java collection to Scala and then back to Java yields the original collection, not double-wrapper.

    0 讨论(0)
提交回复
热议问题