2012-06-13 2 views
3

이런 ArrayList의 정의의 차이 기능 :자바 목록 작성 방법의 차이

List list = new LinkedList(); 

과 같습니다?

LinkedList list = new LinkedList(); 
+2

글쎄, 한 가지는 arraylist가 아닙니다. –

답변

2

으로 목록 인터페이스이며, LinkedList의 실제 구현 유형 :

또한, 원시 유형,하지만 항상 일반적인 유형을 사용해서는 안됩니다.예를 들어 나중에 ArrayList를 사용하기로 결정한 경우 ArrayList가 인터페이스 List를 선언했기 때문에

을 입력 할 수 있습니다. 단점은 나중에 List 인터페이스의 일부가 아닌 ArrayList/LinkedList/(List에없는 메소드가있는 다른 클래스 이름)의 메소드를 호출하려는 경우 (이는 아마도 문제가되지 않음) 실제로 ArrayList인지 확인하고 그 유형으로 캐스트해야합니다. 이와 같이 :

ArrayList arrayList = (ArrayList) list; 

* 실제로는 ArrayList인지 확인한 다음에 만 예외가 발생합니다.

1

하나는 변수 유형으로 interface을 사용합니다. 다른 하나는 concrete class 유형을 사용합니다.

일반적으로 변수 유형에 인터페이스 유형을 사용하는 것이 더 편리합니다. 휴대형이기 때문에 더 단단하게 coupling을 생성하기 때문입니다.

0

모두 작동합니다. 차이점은 List이 인터페이스이고 LinkedList이 구현됨을 의미합니다. 나중에 구현을 쉽게 전환 할 수 있기 때문에 인터페이스를 사용하는 것이 더 좋습니다.

1

이것을 인터페이스에 코딩이라고합니다. 그것은 특정한 이익을 가지고 있습니다. 귀하의 질문에 따라, 나는이 언어를 처음 사용하신다고 생각합니다. 영향을받는 모든 개발자가 개발에 게시 신속하게 지정 될 수있는 객체의 메서드와 : 다음과 같은 자바의 세계에 따르면

, 일부 혜택

디자인되는 자바 컴파일러 보장이 인터페이스의 모든 메소드 올바른 서명으로 구현되었으며 인터페이스에 대한 모든 변경 사항은 다른 개발자가 즉시 볼 수있는 입니다. 통합 : 확립 된 인터페이스로 인해 클래스 또는 서브 시스템을 함께 빠르게 연결할 수있는 기능이 있습니다. 테스트 : 인터페이스 도움말 iso 후반 버그는이 방법

이것은 첫 번째는 목록을 선언 http://www.javaworld.com/jw-08-1999/jw-08-interfaces.html

2

읽기 시작하기에 좋은 장소이며,로 초기화 주어진 부분 집합에 가능한 논리 오류의 범위를 제한하기 때문에 List 인터페이스의 새로운 LinkedList 구상 구현 나머지 코드는 구체적인 구현에 대해 신경 쓰지 않습니다. 중요한 것은 목록이라는 것뿐입니다. 나중에 ArrayList가 더 효율적이라는 것을 알게되면 초기화를 변경하기 만하면됩니다.

두 번째 것은 LinkedList를 선언하고 새 LinkedList로 초기화합니다. 나머지 코드는 그것이 LinkedList라는 것을 알고 List에없는 LinkedList의 메서드를 사용할 수 있습니다. 나중에 ArrayList가 더 효율적이라는 것을 알게되면 나머지 코드를 변경해야 할 수도 있습니다.

일반적으로 가장 일반적인 유형을 사용하고 가능한 가장 일반적인 유형을 사용하고 구현보다는 인터페이스로 코딩하십시오. 다른 답변이 제안

List<String> list = new LinkedList<String>(); 
+0

더하기 제네릭에 대한 언급 - 하루 종일 10 년 된 레거시 코드로 하루 종일 맞서고 있습니다. 최악의 경우입니다 : Vector foo = new Vector(); – David