List-Array List, Linked List [J AVA]

List List 컬렉션은 데이터를 저장할 경우 인덱스 순으로 데이터가 저장됩니다.List 인터페이스를 실현하는 클래스에는 대표적으로 Array List <E>와 Linked List <E>가 있습니다.이두가지가기능적측면에서는똑같지만데이터를저장하는방식에서는차이가 있습니다.그리고 여기서 말하는 데이터는 인스턴스(객체)입니다.먼저 이 두 가지 공통점은 데이터 저장 절차를 유지한다는 것입니다.양쪽 모두 List 인터페이스를 구현하기 때문입니다.두 번째 공통점은 모두 동일한 인스턴스의 중복 저장을 허용합니다.그럼 각각 데이터를 저장하는 방법은 어떤 면에서 차이가 있을까요?Array List는 배열 기반의 자료 구조입니다. 따라서 배열을 이용해 데이터를 저장합니다.Linked List는 리스트 기반의 자료구조입니다. 따라서 목록을 구성하고 데이터를 저장합니다.

그럼 먼저 List 인터페이스의 메서드 종류에 대해서 보겠습니다.메서드 내용 add(Ee) 데이터 추가 set(intindex, Ee) 해당 인덱스에 입력된 데이터로 대체get(intindex) 해당 인덱스의 데이터 리턴 is Empty() 데이터의 유무 리턴 size() 저장된 데이터의 개수 리턴 remove(Objecto) 해당 데이터 삭제에 자주 사용되는 List 인터페이스의 메서드에 대해 간단히 조사했습니다.그럼 Array List부터 볼까요?

Array List Aray List 는, List 인터페이스를 구현한 클래스입니다.데이터를 저장하는 경우 실제 배열에 값이 저장되지만 저장 공간이 고정적인 배열과는 달리 이미 Array List 클래스 내부에서 값을 저장하고 삭제하는 경우 내부적으로 배열 저장 공간을 관리할 수 있도록 설계되어 있습니다.쉽게 말해서 5개의 데이터를 저장하게 되면 5칸 배열이 생성되고 각 칸에 데이터가 저장되며 여기서 0번째 값을 삭제하게 되면 배열의 0번째 값이 삭제되는 것이 아니라 4칸의 배열이 다시 생성되고 거기에 0번째 값을 제외한 1~4번째 값이 새로운 배열로 이동하게 됩니다.이렇게 내부적으로 이미 설계가 되어 있어서 우리는 이것을 사용법만 알면 데이터를 효율적으로 관리할 수 있습니다.

예제 확인해 볼게요.Array List 에 값을 저장하고 삭제하고 수정하는 예제입니다.실행결과 아래와 같이 출력되었습니다.

지금 확인한 예제는 ArrayList의 데이터 자료형이 Integer입니다.(<>내부를 Integer로 선언한다)지만 개발자가 정의한 클래스도 위치할 수 있습니다.

그 예제를 지금 확인해 보겠습니다.Array List <Student>와 같이 제네릭을 통해 직접 정의한 Student 클래스로 자료형을 설정했습니다.이것이 가능한 이유는 Array List를 구현하여 데이터를 저장할 때 실제로 각 저장 공간에 데이터 그대로 저장되는 것이 아니라, 데이터를 저장하고 있는 인스턴스(Object)들의 주소 값을 저장해 놓았기 때문입니다.그러니까 아래 그림과 같습니다.

아까 배운 반 배열을 생각하면 이해가 빠를 거예요즉 첫 번째 인덱스 저장공간에는 영수 객체 참조값이, 두 번째 인덱스 저장공간에는 철수 객체 참조값이, 세 번째 인덱스 저장공간에는 영희 객체 참조값이 저장되어 있는 것입니다.여기까지가 이해가 됐다면 어떻게 목록을 만들까요?앞의 예와 달리 ArrayList 참조값을 그대로 출력하면 앞의 예제에서는 내부의 값이 그대로 출력되었지만 정의한 클래스를 제너럴로 설정할 경우에는 to String을 재정의해야 합니다. 왜냐하면 ArrayList 참조값(arData)을 그대로 출력하면 위의 코드에서는 arData.toString()이 실행되고, 이는 내부적 메소리에 의한 설계용 객체입니다.toString()이 실행되고, 이는 내부적 저장된 객체에 의한 설계용 객체입니다.따라서 String, Integer와 같은 클래스는 이미 내부적으로 toString()메서드가 값을 출력하도록 설정되어 있기 때문에 재정의를 할 필요는 없지만 정의된 클래스는 재정의하지 않을 경우 부모 클래스인 Object에 정의되어 있는 toString을 사용하게 되므로 반드시 재정의를 해서 오브젝트에 저장되어 있는 값이 출력되도록 해야 합니다.따라서, 이하와 같이 출력되고 있는 것을 확인할 수 있습니다.

Linked List Linked List 도 List 인터페이스를 구현한 클래스입니다.다만 Array List는 배열 기반 저장이면 Linked List는 리스트 기반 저장이라는 차이가 있습니다.목록에 의해 저장 공간을 관리하므로 인덱스는 존재하지 않습니다.즉, 각각의 저장공간을 하나하나 연결하는 방식으로 데이터를 저장합니다.

그림으로 간단하게 표현해봤습니다이렇게 하나하나 직접 접속이 되어 있기 때문에 데이터를 추가하거나 삭제하는 것이 Array List에 비해 원활합니다.단 Array List는 인덱스가 존재하고 저장공간을 빠르게 찾을 수 있는 반면 Linked List는 원하는 저장공간을 찾기 위해 1번 저장공간에서 2번, 3번… 순서대로 순서대로 찾아야 하기 때문에 시간이 많이 걸리는 단점이 있습니다.따라서 검색이 필요한 경우 Array List를 사용하고 데이터 삽입 및 삭제가 잦은 경우 Linked List를 사용합니다.

Linked List와 Array List 양쪽에 List 인터페이스를 구현하기 때문에 사용법은 완전히 동일합니다.따라서 조금 전에 배운 Array List의 사용법과 똑같이 사용하세요.

단, Linked List 객체 생성은 List <E>ar Data=new Linked List <E>(); 이와 같이 객체만 Linked List 로 생성하여 사용하시면 됩니다.

이상으로 List에 대해 썰렁했습니다!!!

error: Content is protected !!