////
Search
😀

7월 12일(화)

List 와 배열

배열

1. 고정된 크기를 갖는같은 자료형의 원소들이 연속적인(논리적 저장 순서와 물리적 저장 순서가 일치) 형태로 구성된 자료구조이다. 2. 인덱스에 따라 값을 유지하므로 원소가 삭제되어도 빈자리가 남게되어 메모리가 낭비된다. -처음 크기를 10으로 지정한다면 5개의 데이터만 저장하더라도 실제 배열의 크기는 10이다. 3. 인덱스(index) : 각 원소의 번호로 0번부터 시작하며, 해당 원소에 접근한다. -데이터 갯수가 확실하게 정해져 있고, 접근이 빈번한 경우 배열이 효율적이다.
Plain Text
복사

리스트

1.
리스트의 장점 : 데이터 넣을 때 편하다, 오토 라벨링
2.
리스트 단점 : 키가 숫자이기에 데이터 접근할 때 불편하다.
1. 배열의 문제점을 해결하기 위한 자료구조빈틈없는 데이터의 적재라는 장점을 가진다. 2. 원소를 삭제했을 때 삭제된 데이터 뒤 원소로 빈틈없이 연속적으로 위치시킨다. 3. 리스트의 핵심은 원소들 간의 순서로순서가 있는 데이터의 모임이 리스트이며 리스트를 다른 이름으로 시퀀스(sequence)라고도 부른다. 4. 배열에서 인덱스는 유일무이한 식별자이지만 리스트에서는 몇 번째 데이터인지 정도의 의미를 가진다. 5. 빈 엘리먼트는 허용하지 않는다.
Plain Text
복사

List와 Map 예시코드

import java.util.List; import java.util.ArrayList; class Main { public static void main(String[] args) { List<Integer> ages = new ArrayList<>(); ages.add(10); // 0, 철수 나이 ages.add(20); // 1, 영희 나이 ages.add(30); // 2, 영수 나이 ages.remove(1); // 인덱스가 1인것을 삭제 System.out.println(ages.get(1)); } }` `import java.util.List; import java.util.ArrayList; import java.util.Map; import java.util.HashMap; class Main { public static void main(String[] args) { List<Integer> ages = new ArrayList<>(); ages.add(10); // 0, 철수 나이 ages.add(20); // 1, 영희 나이 ages.add(30); // 2, 영수 나이 ages.remove(1); // 인덱스가 1인것을 삭제 System.out.println(ages.get(1)); Map<String, Integer> ages2 = new HashMap<>(); ages2.put("철수", 10); // 철수, 철수 나이 ages2.put("영희", 20); // 영희, 영희 나이 ages2.put("영수", 30); // 영수, 영수 나이 ages.remove("영수"); // 인덱스가 1인것을 삭제 System.out.println(ages.get("영희")); } }`
Java
복사
리스트 장점 : 데이터 넣을 때 편하다, 오토 라벨링
리스트 단점 : 데이터 접근할 때 불편하다, 키가 숫자이기에
맵 장점 : 데이터 접근할 때 편하다, 키가 인간이 이해하기 쉬운 형태이기에
맵 단점 : 데이터 넣을 때 불펴나다, 수동 라벨링
Q. 자바에서는 왜 배열을 스택에 저장할 수 없을까?
Java에서는 무조건 배열이 힙에 만들어진다.
스택영역의 변수 장점
new 나 malloc 없이 메모리 할당 자동
메모리 해제도 자동임
스택영역의 변수 단점
수명이 제한적이다. (정해진 수명을 벗어날 수 없음)
사이즈가 실행 중에 바뀔 수 없다.
힙 영역의 변수 장점
수명을 개발자가 컨트롤 할 수 있다.
실행 중에 사이즈를 정할 수 있다. or 사이즈가 동적이다
힙 영역의 변수 단점
메모리 누수 가능성 (free를 꼭 해야한다. 단, 자바는 해당X GC)
추가 포인터 문법이 필요하다(리모컨)
결론 - 스택에 왜 저장 안하는 가?
동적으로 할당하여 상황에 유연하게 대처할 수 있도록 한다. 게다가 GC를 통한 메모리 관리가 C언어보다 편리하기 때문이다.