본문 바로가기
프로그래밍 언어

배열 vs 리스트

by do_ng 2021. 1. 26.

데이터 추가 시)

- 배열은 기존에 인덱스에 있는 데이터를 변경하면 인덱스는 고정되고 인덱스에 해당되는 데이터만 변경됨 

- 리스트의 경우는 기존에 있는 인덱스에 새로운 데이터를 넣으면 기존의 데이터는 한 칸 뒤로 밀려나감 

 

		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