데이터 추가 시)
- 배열은 기존에 인덱스에 있는 데이터를 변경하면 인덱스는 고정되고 인덱스에 해당되는 데이터만 변경됨
- 리스트의 경우는 기존에 있는 인덱스에 새로운 데이터를 넣으면 기존의 데이터는 한 칸 뒤로 밀려나감
List list = new ArrayList();
list.add(10); // 인덱스 0
list.add(20); // 인덱스 1
list.add(30); // 인덱스 2
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i)); // list = [10,20,30]
}
list.add(2,50); // 인덱스 2 -> 50을 넣음 , 인덱스 2에 있던 30은 인덱스3으로 밀려남
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i)); // list = [10,20,50,30]
}
데이터 삭제 시)
- 배열의 경우 해당 인덱스의 공간을 제거하는 게 불가능
- 리스트의 경우 해당 인덱스를 제거하는게 가능 (배열보다 메모리 공간을 효율적으로 사용 가능)
int[] array = {10,20,30};
array[1] = 0; // 인덱스 1에 데이터가 필요없을 경우 -> 인덱스가 있는 공간을 제거 X (사용하지 않는 인덱스가 남아있게됨)
List list = new ArrayList();
list.add(10); // 인덱스 0
list.add(20); // 인덱스 1
list.add(30); // 인덱스 2
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i)); // list = [10,20,30]
}
list.remove(1); // 인덱스 1에 데이터가 필요없을 경우 -> 해당 인덱스의 공간을 제거가능(배열보다 메모리 공간을 효울적으로 사용가능)
// 해당 인덱스를 제거했을때 뒤에 인덱스가 존재한다면 앞으로 한칸씩 당겨짐
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i)); // list = [10,30]
}
추가사항)
C언어 - 리스트 지원 X
자바스크립트 - 리스트 지원 O
파이썬 - 배열이 따로 없고 리스트가 배열을 대체해서 사용함 (리스트 == 배열)
자바 - 리스트와 배열을 모두 지원 ( 자바에서 리스트는 다시 2개로 구분됨 - LinkedList, ArrayList)
-> 상황에 따라서 필요한 것을 사용하도록 하라는 뜻에서 여러 개로 구분한 것이 아닌가?
ArrayList vs LinkedList )
- ArrayList 데이터 추가/삭제는 LinkedList 보다 느린 반면 해당 인덱스 값을 조회하는 건 빠름
자기가 구현하고자 하는 게 무엇인가에 따라서 ArrayList를 사용할지 LinkedList를 사용할지를 선택한다는 점에서 자바라는 언어는 파이썬이나 자바스크립트 같은 언어보다 개발자가 알아야 할 점이 많지만 자유도는 높다고 할 수 있음
'프로그래밍 언어' 카테고리의 다른 글
다형성 (0) | 2021.02.12 |
---|---|
추상클래스 , 인터페이스 개념 (0) | 2021.01.28 |
인스턴스,static 개념 (0) | 2021.01.24 |
Call Stack(호출스택) (0) | 2021.01.24 |
자바 ArrayList 안에 List 넣기 (0) | 2020.12.24 |