2015-02-06 4 views
1

누군가가 다음 코드의 의미를 설명 할 수 있습니까? 특히 ArrayList 및 List와 둘 다 사용해야하는 이유는 무엇입니까?Arraylist and List in Java

String [] forecastArray = 
      { 
        "Today - Sunny - 35/30", 
        "Tomorrow - Foggy - 33/28", 
        "Wednesday - Cloudy - 33/26", 
        "Thursday - Sleepy - 30/24", 
        "Friday - Bunking - 36/34", 
        "Saturday - Trapped - 38/35", 
        "Sunday - Heavy Rain - 32/28" 
      }; 
    List<String> myList = Arrays.asList(forecastArray); 

    List<String> weekForecast = new ArrayList<>(myList); 
+7

자바의 Google 다형성 – Kon

+0

'myList'는'forecastArray'가 지원하는'List'이며 immuteable입니다. 당신은 그것을 바꿀 수 없을 것입니다. 'weekForecast'는 그 배열의 복사본에 의해 뒷받침되며 변경할 수 있습니다. – Cfx

답변

0

목록 인터페이스입니다 컴파일되지 않습니다. ArrayList는 해당 인터페이스의 구현입니다.

기본적으로 Arrays.asList (forecastArray) 메서드는 List를 반환하지만 호출자는 반환되는 인스턴스를 인식하지 못합니다. 먼저 목록에 등록한 다음 Arraylist를 초기화하십시오.

또는 아래와 같이 할 수 있습니다.

목록 weekForecast = new ArrayList (Arrays.asList (forecastArray));

3

List은 인터페이스입니다. ArrayList은 해당 인터페이스의 구현입니다. 일반적으로 인터페이스에 프로그래밍하는 것이 좋습니다. 그렇게하면 LinkedList으로 전환 할 수 있고 나중에 반환 유형이나 다른 코드를 변경하지 않을 수 있습니다. 이것은 polymorphism의 예입니다.

+1

그리고'Arrays.asList'에 의해 반환 된 목록은'ArrayList'도 아니고'LinkedList'도 아닙니다. 실제로 당신이 접근 할 수없는 타입이기 때문에 실제 타입을 사용할 수 없습니다. – immibis

+0

이 정보는 훌륭합니다. 내 질문은 왜 단순히 우리가 대신 Arrays.asList (forecastArray) 단순히 전달하는 대신 전달할 필요가있다 .Array. – George

+0

'ArrayList'에는 배열을 취하는 생성자가 없습니다. –

1

Elliot Frish은 첫 번째 부분을 명확하게 설명했습니다. 특정 경우

,

List<String> myList = Arrays.asList(forecastArray); 

List<String> weekForecast = new ArrayList<>(myList); 

는 동일하지 않습니다.

List 인스턴스가 Arrays.asList에 의해 반환되었으므로 java.utils.ArrayList과 같지 않습니다. ArrayListArrays 클래스 안에 private static class입니다. (배열뿐만 아니라 컬렉션) 모두 ArrayList의 이후

당신이 List에 할당 할 수 있습니다,List 인터페이스를 구현합니다. 인터페이스에 코드 :

참고 : ArrayList<String> myList = Arrays.asList(someArray); ->