내가 포함하는 변수가 있다면 또는 List
다른 유형의 많은 객체를 포함 할 수 있습니다 . a 와 an 의 차이 는 꽤 큽니다. 방법의 큰 O 행동은 크게 다릅니다. 예를 들어를 정렬 한 다음 이진 검색을 수행하여 사용하는 것은 완벽 하지만 괜찮 습니다 .ArrayList
LinkedList
LinkedList
ArrayList
List
ArrayList
LinkedList
내가 포함하는 변수가 있다면 또는 List
다른 유형의 많은 객체를 포함 할 수 있습니다 . a 와 an 의 차이 는 꽤 큽니다. 방법의 큰 O 행동은 크게 다릅니다. 예를 들어를 정렬 한 다음 이진 검색을 수행하여 사용하는 것은 완벽 하지만 괜찮 습니다 .ArrayList
LinkedList
LinkedList
ArrayList
List
ArrayList
LinkedList
답변:
나는 그렇게 말하지 않을 것입니다.
누설 추상화는 추상화해야 할 구현 세부 사항을 처리하도록 강요하는 추상화입니다. 그러나 구현마다 성능이 항상 다르므로 누출로 간주하면 누출이 아닌 추상화가 없습니다.
List
추가 문서가없는 것으로 선언 된 경우 성능에 대한 보장이 없으며, 성능에 민감한 작업을 수행하려면 복사하여 작업해야합니다.
또한 기능이 충분하고 성능에 대해 많은 가정을하도록 유혹하지 않는 훨씬 일반적인 인터페이스가 있다는 것을 잊지 마십시오 Collection
.
Iterable
있습니다.
사소한 추상화는 어느 정도 누출됩니다. 그것은 실제로 그것이 여기에 적용되는지 확실하지 않습니다. :-)
추상화는 행동과 관련이 있습니다. 동작이 특정 성능 (Java List
가 아닌) 을 지정 하지 않으면 구현 세부 사항입니다. 즉 관련이 없습니다.
Java를 사용하면 문서 외부의 인터페이스에 대한 최소 성능을 지정할 수 없으며 컴파일러가 확인하기가 매우 어려울 수 있습니다. 성능이 중요한 경우 몇 가지 옵션을 볼 수 있습니다.
BinarySearchPerformantList
다양한 방법의 성능 요구 사항을 지정 하는 새 인터페이스 ( 예 : (yuck!))를 만듭니다 .옵션 2는 아마도 더 나은 추상화이지만 추가 오버 헤드가 있습니다.
LinearSpace
과 LogarithmicTime
같은 클래스를 선언 다음과 public class BinarySearch : ISearchStrategy<T>, LogarithmicTime
. 다른 클래스는 public T find<T, S>(IList<T> list, S strategy) where S : ISearchStrategy<T>, LogarithmicTime { }
성능 제약 조건을 적용하는 것과 같은 매개 변수를 사용할 수 있습니다 .
Java에는 일반적으로 일정한 랜덤 액세스 시간 (O (1) get, put 등)이있는 목록으로 정의되는 RandomAccess 인터페이스가 있습니다. 모듈에 이러한 성능 특성이있는 목록이 필요하다고 생각되면 RandomAccess
대신을 사용해보십시오 List
. 그러한 변경을 할 필요가 없다고 느끼지 않는다면 (그리고 거의 할 일이 없다면) List는 그렇게 새지 않을 것입니다.