2011-12-15 3 views
13

스칼라 버전이 뭔가를 작성하여 스칼라의 데이터 구조 java.util.List 및 기타 컬렉션을 변환하는 편리한 변환이 존재 2.9 시작 기존 자바 코드와 상호 작용할 때 스칼라의 장점을 활용할 수 있기 때문이다.시간 복잡도는

그러나, 나는 참여 시간과 공간의 복잡성에 대해 확신 오전 공식 문서에서 아무것도 찾을 수 없습니다, 따라서, 다음과 같은 질문 : 나는 복잡성에 대한 정보를 얻을 수 있습니다

(시간과 공간)의 JavaConverters?

답변

19

다양한 JavaConverters 클래스는 원래 자바 컬렉션 (underlying)을 감싸고 스칼라 인터페이스를 제공하기 위해 Adapter 패턴을 사용하고 있습니다. 따라서 변환 된 콜렉션을 변환하고 액세스하는 작업은 일정 시간 (O(1))으로 일정하므로 약간의 오버 헤드가 발생합니다.

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 
} 

는 또한 자바의 뒤쪽으로 스칼라 자바 콜렉션을 변환하면 원래의 수집, 아니 두 래퍼를 얻을 수 있습니다 :

는 예를 들어이 JListWrapper의 전체 소스 코드입니다.

+0

'JListWrapper'는'JavaConversters'가 아닌'JavaConversions'에서 가져 왔습니다. 일정 시간을 포함하여 이러한 관계가 주어지는 문서가 있습니까? 나는 API 문서에서 그걸 발견 할 수 없다. – Frank

+0

@Frank :'JavaConverters'의'.asScala'는'JavaConversions'의'JListWrapper'를 사용합니다. 불행히도 나는 시간 복잡성을 문서화하는 것을 찾을 수 없다. –

+0

감사합니다. 다른 답변이 없다는 사실을 받아 들일 것입니다.하지만 그 중 아무 것도 실증되지는 않습니다. – Frank

관련 문제