728x90
List
- 배열과 같이 객체를 일렬로 늘어놓은 구조를 가지고 있음
- 객체를 저장하면 자동으로 인덱스가 부여됨
- 인덱스로 객체를 검색, 추가, 삭제할 수 있음
ArrayList
- 객체가 인덱스로 관리된다
- 저장 용량 초과 시, 자동으로 늘어남 (기본적으로 10이 지정됨)
- 데이터가 연속적으로 존재 (순서 유지)
- 특정 인덱스 객체 제거 시, 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 당겨짐
ArrayList<타입 매개변수> 객체명 = new ArrayList<타입 매개변수>(초기 저장 용량);
ArrayList<String> container1 = new ArrayList<String>();
// String 타입의 객체를 저장하는 ArrayList 생성
// 초기 용량이 인자로 전달되지 않으면 기본적으로 10으로 지정됨
ArrayList<String> container2 = new ArrayList<String>(30);
// String 타입의 객체를 저장하는 ArrayList 생성
// 초기 용량을 30으로 지정
public class ArrayListExample {
public static void main(String[] args) {
// ArrayList를 생성하여 list에 할당
ArrayList<String> list = new ArrayList<String>();
// String 타입의 데이터를 ArrayList에 추가
list.add("Java");
list.add("egg");
list.add("tree");
// 저장된 총 객체 수 얻기
int size = list.size();
// 0번 인덱스의 객체 얻기
String skill = list.get(0);
// 저장된 총 객체 수 만큼 조회
for(int i = 0; i < list.size(); i++){
String str = list.get(i);
System.out.println(i + ":" + str);
}
// for-each문으로 순회
for (String str: list) {
System.out.println(str);
}
// 0번 인덱스 객체 삭제
list.remove(0);
}
}
LinkedList
- 데이터를 효율적으로 추가, 삭제, 변경하기 위해 사용
- 데이터가 불연속적으로 존재하며, 서로 연결(link)되어 있음
- LinkedList의 각 요소(node)들은 자신과 연결된 이전 요소 및 다음 요소의 주소 값과 데이터로 구성
- 배열처럼 데이터를 이동하기 위해 복사할 필요가 없기 때문에 처리 속도가 훨씬 빠름
public class LinkedListExample {
public static void main(String[] args) {
// Linked List를 생성하여 list에 할당
ArrayList<String> list = new LinkedList<>();
// String 타입의 데이터를 LinkedList에 추가
list.add("Java");
list.add("egg");
list.add("tree");
// 저장된 총 객체 수 얻기
int size = list.size();
// 0번 인덱스의 객체 얻기
String skill = list.get(0);
// 저장된 총 객체 수 만큼 조회
for(int i = 0; i < list.size(); i++){
String str = list.get(i);
System.out.println(i + ":" + str);
}
// for-each문으로 순회
for (String str: list) {
System.out.println(str);
}
// 0번 인덱스 객체 삭제
list.remove(0);
}
}
ArrayList vs LinkedList
데이터의 잦은 변경이 예상될 시 LinkedList
데이터의 개수가 변하지 않을 시 ArrayList
속도 비교
- 데이터를 순차적으로 추가하거나 삭제 시 : ArrayList
- 데이터 검색 시 : ArrayList
- 중간에 데이터를 추가하거나, 중간에 위치하는 데이터를 삭제하는 경우 : LinkedList
ps) 사실 요즘 컴퓨터 성능이 좋아서 엄청나게 방대한 자료가 아닌 이상 드라마틱한 차이가 나지는 않는다ㅋ
728x90
'개발일지 > Java' 카테고리의 다른 글
Java Set<E>, HashSet, TreeSet (0) | 2022.09.17 |
---|---|
Java Iterator (0) | 2022.09.17 |
Java 컬렉션 프레임워크 (Collection Framework) (0) | 2022.09.14 |
Java 예외 처리 (Exception Handling) (0) | 2022.09.14 |
Java 제네릭 (Generic) (0) | 2022.09.14 |