2012-10-10 2 views
0

가능한 복제를 위해 ArrayList :
List versus ArrayList as reference type?일반 목록 initilaization는

나는이 것을 StackOverflow의 어딘가에 읽어

List<String> foo = new ArrayList<String>(); 

는 ArrayList를 초기화하기위한 가장 좋은 방법입니다. 그리고 그 :

ArrayList<String> foo = new ArrayList<String>(); 

피해야합니다. 이 올바른지? 그렇다면 누군가 그 이유를 설명 할 수 있습니까?

덕분에, EG는

+2

[List와 ArrayList를 참조 유형으로 복제 할 수 있습니까?] (http://stackoverflow.com/questions/4062982/list-versus-arraylist-as-reference-type), [List vs. ArrayList 란 무엇입니까? ?] (http://stackoverflow.com/questions/6867484), [Java List vs ArrayList] (http://stackoverflow.com/questions/9309093), [List vs ArrayList] (http://stackoverflow.com/ 질문/7726361) 및 [Return ArrayList 또는 List?] (http://stackoverflow.com/questions/11683044) –

+1

ArrayList를 다른 List로 바꾸려면 몇 칸을 올바르게 변경/확인해야합니까? 각 예? –

답변

1

대부분의 개발자가 ArrayList (본인 포함)을 사용하는 방식이며 다형성의 일반적인 교리입니다. 가능한 모든 기능을 사용할 수있는 클래스 계층 구조에서 최상위 클래스/인터페이스를 사용해야합니다.

일반적으로이 방법은 코드를보다 유연하게 만들고 List으로 프로그래밍하는 것이 형식이 ArrayList에만 있고 사용할 수없는 메서드를 사용하도록 제한하지 않으므로 프로그래밍을 쉽게 전환 할 수 있으므로, 예 : LinkedList. 예를 들어

, 내가 한 경우 :

LinkedList<String> strings = new LinkedList<String>(); 
String s = strings.pop(); 

popLinkedList에 단독으로, 그래서 난 그냥 ArrayList에 직접 변경할 수 없습니다. 나는 또한 내 코드를 변경해야 할 것 :

ArrayList<String> strings = new ArrayList<String>(); 
String s = strings.remove(strings.size() - 1); 

을하지만 난 그냥 인터페이스를 사용했다면, 나는 처음에 pop을 사용한 적이 것, 그래서 난 그냥 어떤 구현 I에 strings을 변경 한 수 원했어.

API를 프로그래밍 할 때 특히 중요합니다. 메서드에 공개적으로 액세스 할 수 있고 다른 개발자가 사용하는 경우 적절한 이유가없는 한 메서드의 종류를 제한하지 않도록해야합니다. 특히 인 경우에 포함될 수 있습니다. 좋은 이유가 이 아니고 을 사용하고자하는입니다.

반복 및 추가/삭제 이외의 작업을 수행하는 경우 Collection까지 갈 수도 있습니다.List은 중복을 포함 할 수 있으며 수동으로 주문했기 때문에 여기에서 컨텍스트를 잃기 시작합니다. 그러나 이것이 특별히 중요하지 않고 Collection을 사용할 수있는 경우 목록을 Set 구현으로 바꿀 수도 있습니다.

+0

답장을 보내 주셔서 감사합니다. 모든 의심을 제거했습니다. – aa8y

0

네, 첫 번째는 클라이언트에 최소한의 변경으로 구현 나중에 시간을 변경할 수있는 유연성을 제공합니다.

예를 들어, ArrayListLinkedList으로 변경할 수 있지만 인터페이스 메소드를 사용하면 클라이언트에 미치는 영향이 최소화됩니다.

List<String> tempList = new LinkedList<String>(); 
0

인터페이스 설계라고합니다. List를 매개 변수로 ArrayList 및 LinkedList (또는 인터페이스 List를 구현하는 다른 모든 요소)를 기본 구현으로 사용할 수 있도록 정의하면 코드가 유연 해집니다.