내가 포함하는 변수가 있다면 또는 List다른 유형의 많은 객체를 포함 할 수 있습니다 . a 와 an 의 차이 는 꽤 큽니다. 방법의 큰 O 행동은 크게 다릅니다. 예를 들어를 정렬 한 다음 이진 검색을 수행하여 사용하는 것은 완벽 하지만 괜찮 습니다 .ArrayListLinkedListLinkedListArrayListListArrayListLinkedList
내가 포함하는 변수가 있다면 또는 List다른 유형의 많은 객체를 포함 할 수 있습니다 . a 와 an 의 차이 는 꽤 큽니다. 방법의 큰 O 행동은 크게 다릅니다. 예를 들어를 정렬 한 다음 이진 검색을 수행하여 사용하는 것은 완벽 하지만 괜찮 습니다 .ArrayListLinkedListLinkedListArrayListListArrayListLinkedList
답변:
나는 그렇게 말하지 않을 것입니다.
누설 추상화는 추상화해야 할 구현 세부 사항을 처리하도록 강요하는 추상화입니다. 그러나 구현마다 성능이 항상 다르므로 누출로 간주하면 누출이 아닌 추상화가 없습니다.
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는 그렇게 새지 않을 것입니다.