
List
List인터페이스는 배열과 같이 객체를 일렬로 늘어놓은 구조를 가지고 있다.
객체를 인덱스로 관리하기 때문에 객체를 저장하면 자동으로 인덱스가 부여되고, 인덱스로 객체를 검색 및 추가, 삭제하는 기능을 제공한다.
List 인터페이스를 구현한 클래스로는 ArrayList, Vevtor, LinkedList, Stack 등이 있다.
ArrayList
가장 많이 사용되는 클래스로, 기능적으로 Vector와 동일하지만, 기존의 Vector를 개선한 것이다.
객체가 인덱스로 관리된다는 점에서 배열과 유사하지만 배열은 생성될 때 크기가 고정되는 반면 ArrayList는 저장 용량이 추가되는 경우 자동으로 저장 용량이 늘어난다.
또한, 리스트 계열 자료구조의 특성을 이어받아 데이터가 연속적으로 존재한다.
ArrayList를 생성하기 위해서는 객체타입을 제네릭으로 표기하고 기본 생성자를 호출한다.
즉, 다음과 같이 생성할 수 있다.
List<타입 매개변수> 객체명 = new ArrayList<타입 매개변수>(초기 저장 용량);
List<String> container1 = new ArrayList<String>(); // String 타입의 객체를 저장하는 ArrayList 생성
List<String> container2 = new ArrayList<String>(30); //초기 용량이 30인 ArrayList 생성
ArrayList 추가, 삭제1
public class Main{
public static void main(String[] args){
List<String> container1 = new ArrayList<String>(); // ArrayList 생성
container1.add("Hey"); // String 타입 데이터를 ArrayList에 추가
container1.add("I"); // String 타입 데이터를 ArrayList에 추가
container1.add("Like"); // String 타입 데이터를 ArrayList에 추가
int size = container1.size(); // 저장된 총 객체 수 얻기
String skill = container1.get(0); // 0번 인덱스 객체 얻기
for(int i=0; i<container1.size(); i++){ //저장된 객체 수 만큼 조회
String str = container1.get(i);
System.out.println(i + ":" + str);
}
for (String str: container1){ // for-each문으로 순회
System.out.println(str);
}
container1.remove(0); // 0번 인덱스 객체 삭제
}
}
LinkedList
LinkedList는 데이터를 효율적으로 추가, 삭제, 변경하기 위해서 사용된다.
배열은 모든 데이터가 연속적으로 존재하지만, LinkedList에서는 데이터가 불연속적으로 존재하며, 이 데이터들은 서로 연결되어 있다.
데이터를 삭제한다면, 데이터의 링크를 끊고 해당 요소의 다음요소 데이터를 참조하게된다.
따라서 배열과 같이 데이터를 이동하기 위해 복사할 필요성이 사라지게 되어 데이터 처리 속도가 빠르다.
데이터의 추가 또한 데이터의 이전요소와 다음 요소 사이에 연결해주면 된다.
LinkedList의 데이터 추가, 삭제
public class Main{
public static void main(String[] args){
List<String> container1 = new LinkedList<String>(); // LinkedList 생성
container2.add("Hey"); // String 타입 데이터를 LinkedList에 추가
container2.add("I"); // String 타입 데이터를 LinkedList에 추가
container2.add("Like"); // String 타입 데이터를 LinkedList에 추가
int size = container2.size(); // 저장된 총 객체 수 얻기
String skill = container1.get(0); // 0번 인덱스 객체 얻기
for(int i=0; i<container2.size(); i++){ //저장된 객체 수 만큼 조회
String str = container2.get(i);
System.out.println(i + ":" + str);
}
for (String str: container2){ // for-each문으로 순회
System.out.println(str);
}
container1.remove(0); // 0번 인덱스 객체 삭제
}
}
ArrayList와 LinkedList의 차이
ArrayList와 LinkedList는 예제를 통해 배웠듯이 add(), get(), remove()를 사용하는 방식은 완전히 동일하다
그렇다면 어떤 차이가 있기 때문에 두가지를 사용할까?
- ArrayList의 장점
- 값을 순차적으로 추가하거나 삭제하는 경우에 장점이 있다.
- 데이터를 읽어들이는 경우에 장점이 있다. (인덱스를 통해 데이터에 바로 접근하기 때문)
- LinkedList
- 중간에 값을 추가하거나, 변경, 삭제하는 경우에 장점이 있다.
'CS > Data Structure' 카테고리의 다른 글
[ 자료구조 ] 맵(Map)이란 무엇일까? (0) | 2022.09.13 |
---|---|
[ 자료구조 ] 셋(Set)이란 무엇일까? (0) | 2022.09.13 |
[ 자료구조 ] 이터레이터(Iterator)란 무엇일까? (0) | 2022.09.13 |
[ 자료구조 ] 컬렉션 프레임워크(Collection Framework)란 무엇일까? (0) | 2022.09.13 |
[ 자료구조 ] 배열(Array) (0) | 2022.09.01 |

List
List인터페이스는 배열과 같이 객체를 일렬로 늘어놓은 구조를 가지고 있다.
객체를 인덱스로 관리하기 때문에 객체를 저장하면 자동으로 인덱스가 부여되고, 인덱스로 객체를 검색 및 추가, 삭제하는 기능을 제공한다.
List 인터페이스를 구현한 클래스로는 ArrayList, Vevtor, LinkedList, Stack 등이 있다.
ArrayList
가장 많이 사용되는 클래스로, 기능적으로 Vector와 동일하지만, 기존의 Vector를 개선한 것이다.
객체가 인덱스로 관리된다는 점에서 배열과 유사하지만 배열은 생성될 때 크기가 고정되는 반면 ArrayList는 저장 용량이 추가되는 경우 자동으로 저장 용량이 늘어난다.
또한, 리스트 계열 자료구조의 특성을 이어받아 데이터가 연속적으로 존재한다.
ArrayList를 생성하기 위해서는 객체타입을 제네릭으로 표기하고 기본 생성자를 호출한다.
즉, 다음과 같이 생성할 수 있다.
List<타입 매개변수> 객체명 = new ArrayList<타입 매개변수>(초기 저장 용량);
List<String> container1 = new ArrayList<String>(); // String 타입의 객체를 저장하는 ArrayList 생성
List<String> container2 = new ArrayList<String>(30); //초기 용량이 30인 ArrayList 생성
ArrayList 추가, 삭제1
public class Main{
public static void main(String[] args){
List<String> container1 = new ArrayList<String>(); // ArrayList 생성
container1.add("Hey"); // String 타입 데이터를 ArrayList에 추가
container1.add("I"); // String 타입 데이터를 ArrayList에 추가
container1.add("Like"); // String 타입 데이터를 ArrayList에 추가
int size = container1.size(); // 저장된 총 객체 수 얻기
String skill = container1.get(0); // 0번 인덱스 객체 얻기
for(int i=0; i<container1.size(); i++){ //저장된 객체 수 만큼 조회
String str = container1.get(i);
System.out.println(i + ":" + str);
}
for (String str: container1){ // for-each문으로 순회
System.out.println(str);
}
container1.remove(0); // 0번 인덱스 객체 삭제
}
}
LinkedList
LinkedList는 데이터를 효율적으로 추가, 삭제, 변경하기 위해서 사용된다.
배열은 모든 데이터가 연속적으로 존재하지만, LinkedList에서는 데이터가 불연속적으로 존재하며, 이 데이터들은 서로 연결되어 있다.
데이터를 삭제한다면, 데이터의 링크를 끊고 해당 요소의 다음요소 데이터를 참조하게된다.
따라서 배열과 같이 데이터를 이동하기 위해 복사할 필요성이 사라지게 되어 데이터 처리 속도가 빠르다.
데이터의 추가 또한 데이터의 이전요소와 다음 요소 사이에 연결해주면 된다.
LinkedList의 데이터 추가, 삭제
public class Main{
public static void main(String[] args){
List<String> container1 = new LinkedList<String>(); // LinkedList 생성
container2.add("Hey"); // String 타입 데이터를 LinkedList에 추가
container2.add("I"); // String 타입 데이터를 LinkedList에 추가
container2.add("Like"); // String 타입 데이터를 LinkedList에 추가
int size = container2.size(); // 저장된 총 객체 수 얻기
String skill = container1.get(0); // 0번 인덱스 객체 얻기
for(int i=0; i<container2.size(); i++){ //저장된 객체 수 만큼 조회
String str = container2.get(i);
System.out.println(i + ":" + str);
}
for (String str: container2){ // for-each문으로 순회
System.out.println(str);
}
container1.remove(0); // 0번 인덱스 객체 삭제
}
}
ArrayList와 LinkedList의 차이
ArrayList와 LinkedList는 예제를 통해 배웠듯이 add(), get(), remove()를 사용하는 방식은 완전히 동일하다
그렇다면 어떤 차이가 있기 때문에 두가지를 사용할까?
- ArrayList의 장점
- 값을 순차적으로 추가하거나 삭제하는 경우에 장점이 있다.
- 데이터를 읽어들이는 경우에 장점이 있다. (인덱스를 통해 데이터에 바로 접근하기 때문)
- LinkedList
- 중간에 값을 추가하거나, 변경, 삭제하는 경우에 장점이 있다.
'CS > Data Structure' 카테고리의 다른 글
[ 자료구조 ] 맵(Map)이란 무엇일까? (0) | 2022.09.13 |
---|---|
[ 자료구조 ] 셋(Set)이란 무엇일까? (0) | 2022.09.13 |
[ 자료구조 ] 이터레이터(Iterator)란 무엇일까? (0) | 2022.09.13 |
[ 자료구조 ] 컬렉션 프레임워크(Collection Framework)란 무엇일까? (0) | 2022.09.13 |
[ 자료구조 ] 배열(Array) (0) | 2022.09.01 |