다수의 데이터를 처리할 수 있는 자료구조 - 컬렉션 (List, Set, Map)
2022.03.30
- List : 데이터 순서가 있고 중복 허용
- Set : 데이터 순서가 없고 중복 허용하지 않음
- Map : 키(key)와 값(value)으로 구성되며 키는 중복되지 않고 값은 중복 가능
List
데이터 순서가 있고 중복 허용
- 데이터를 여러 개 담을 수 있는 자료구조
- 데이터를 List에 담을 때 순서를 가지기 때문에 배열을 대체할 수 있고 데이터에 순차적으로 접근하기 쉽다
List<데이터 타입> 변수명 = [데이터1, 데이터2, 데이터3, ...];
List<String> colors = ['Red', 'Orange', 'Yellow'];
List<데이터 타입> 변수명 = List();
colors .add(데이터1);
colors .add(데이터2);
colors .add(데이터3);
List<String> colors = List();
colors .add('Red');
colors .add('Orange');
colors .add('Yellow');
주요 메서드와 프로퍼티
- indexOf(요소) : 요소의 인덱스 값
- add(데이터) : 데이터 추가
- addAll([데이터1, 데이터2]) : 여러 데이터 추가
- remove(요소) : 요소 삭제
- removeAt(인덱스) : 지정한 인덱스의 요소 삭제
- contains(요소) : 요소가 포함되었으면 true, 아니면 false
- clear() : 리스트 요소 전체 삭제
- sort() : 리스트 요소 정렬
- first : 리스트 첫 번째 요소
- last : 리스트 마지막 요소
- reversed : 리스트 요소 역순
- isNotEmpty : 리스트가 비어있지 않으면 true, 비었으면 false
- isEmpty : 리스트가 비었으면 true, 비어있지 않으면 false
- single : 리스트에 단 1개의 요소만 있다면 해당 요소 리턴
예제코드
main() {
List<dynamic> list = [1, 2.5, 'test'];
print('index of test = ${list.indexOf('test')}'); // test 인덱스 값
list.add('신규'); // 한개의 요소 추가
list.addAll([100, 'Korea']); // 여러 요소 추가
list.remove(2.5); // 요소(2.5) 삭제
list.removeAt(0); // 인덱스(0) 요소 삭제
print(' ---------- 목록의 시작 -----');
for (int i = 0; i < list.length; i++) {
print('리스트${i}: ${list[i]}');
}
print(' ---------- 목록의 끝 -----');
print('목록 처음 = ${list.first}');
print('목록 마지막 = ${list.last}');
print('목록 역순 = ${list.reversed}');
if (list.contains('new')) {
print('신규가 있습니다. ');
}
if (list.isNotEmpty) {
print('리스트는 비어 있지 않습니다');
}
list.clear(); // 리스트 모든 항목 삭제
for (int i = 0; i < list.length; i++) { // 비어 있으므로 출력 없음
print('리스트${i}: ${list[i]}');
}
if (list.isEmpty) {
print('리스트가 비어 있습니다');
}
list.add(1000);
// 리스트의 요소가 1개라면 해당 요소 리턴
print('한개의 요소 값 = ${list.single}');
list.addAll([100, 20, 1, 200, 5, 3, 30, 20001]);
list.sort(); // 리스트 정렬
print(list);
}
index of test = 2
---------- 목록의 시작 -----
리스트0: test
리스트1: 신규
리스트2: 100
리스트3: Korea
---------- 목록의 끝 -----
목록 처음 = test
목록 마지막 = Korea
목록 역순 = (Korea, 100, 신규, test)
리스트는 비어 있지 않습니다
리스트가 비어 있습니다
한개의 요소 값 = 1000
[1, 3, 5, 20, 30, 100, 200, 1000, 20001]
Set
List와 동일하지만,
-
데이터 순서가 없고 중복 불가
- List는 [ ]를 사용했지만 Set은 { }를 사용
Set<데이터 타입> 변수명 = {데이터1, 데이터2, 데이터3, ...};
var colors = {'RED', 'Orange', 'Yellow'};
Set<String> colors = {'RED', 'Orange', 'Yellow'};
// 비어있는 set을 선언할 때
var ismap = {}; // 이건 Map 자료구조
var isset = <String>{}; // 이렇게 선언하면 Set
Set<데이터 타입> 변수명 = Set();
colors .add(데이터1);
colors .add(데이터2);
colors .add(데이터3);
Set<String> colors = Set();
colors .add('Red');
colors .add('Orange');
colors .add('Yellow');
주요 메서드와 프로퍼티 (인덱스와 관련된것 사용 불가)
indexOf(요소) : 요소의 인덱스 값- add(데이터) : 데이터 추가
- addAll([데이터1, 데이터2]) : 여러 데이터 추가
- remove(요소) : 요소 삭제
removeAt(인덱스) : 지정한 인덱스의 요소 삭제- contains(요소) : 요소가 포함되었으면 true, 아니면 false
- clear() : 리스트 요소 전체 삭제
sort() : 리스트 요소 정렬- first : 리스트 첫 번째 요소
- last : 리스트 마지막 요소
reversed : 리스트 요소 역순- isNotEmpty : 리스트가 비어있지 않으면 true, 비었으면 false
- isEmpty : 리스트가 비었으면 true, 비어있지 않으면 false
- single : 리스트에 단 1개의 요소만 있다면 해당 요소 리턴
예제코드
main() {
Set<dynamic> list = {1, 2.5, 'test'};
//print('index of test = ${list.indexOf('test')}'); // Set에서 사용불가
list.add('신규'); // 한개의 요소 추가
list.addAll([100, 'Korea']); // 여러 요소 추가
list.remove(2.5); // 요소(2.5) 삭제
//list.removeAt(0); // Set에서 사용불가
print(' ---------- 목록의 시작 -----');
for (int i = 0; i < list.length; i++) {
// 비어 있으므로 출력 없음
// print(list[i]); // Set에서 index 사용불가
}
print(list);
print(' ---------- 목록의 끝 -----');
print('목록 처음 = ${list.first}');
print('목록 마지막 = ${list.last}');
//print('목록 역순 = ${list.reversed}'); // Set에서 사용불가
if (list.contains('new')) {
print('신규가 있습니다. ');
}
if (list.isNotEmpty) {
print('리스트는 비어 있지 않습니다');
}
list.clear(); // 리스트 모든 항목 삭제
if (list.isEmpty) {
print('리스트가 비어 있습니다');
}
list.add(1000);
// 리스트의 요소가 1개라면 해당 요소 리턴
print('한개의 요소 값 = ${list.single}');
list.addAll([100, 20, 1, 200, 5, 3, 30, 20001]);
//list.sort(); // Set에서 사용불가
print(list);
}
---------- 목록의 시작 -----
{1, test, 신규, 100, Korea}
---------- 목록의 끝 -----
목록 처음 = 1
목록 마지막 = Korea
리스트는 비어 있지 않습니다
리스트가 비어 있습니다
한개의 요소 값 = 1000
{1000, 100, 20, 1, 200, 5, 3, 30, 20001}
Map
Key 와 Value로 이루어짐
-
키와 값은 한 쌍
- 키에 대한 값이 매칭 되어 있어서 빠른 탐색이 가능
Map<키 타입, 값 타입> 변수명 = {
키1:값1,
키2:값2,
키3:키3
};
Map<int, String> testMap = {
1:'Red',
2:'Orange',
3:'Yellow'
};
Map<키 타입, 값 타입> 변수명 = Map();
변수명[1] = 값1;
변수명[2] = 값2;
변수명[3] = 값3;
Map<int, String> testMap = Map();
testMap[1] = 'Red';
testMap[2] = 'Orange';
testMap[3] = 'Yellow';
주요 메서드
- update() : 키에 대한 값의 맵핑을 새로운 값으로 변경
예제코드
main() {
Map<int, String> testMap = {1: 'red', 2: 'orange', 3: 'yellow'};
testMap[4] = 'green';
testMap.update(1, (value) => 'newRed', ifAbsent: () => 'newColor');
testMap.update(5, (value) => 'newBlue', ifAbsent: () => 'newColor');
print(testMap[1]);
print(testMap[5]);
print(testMap);
}
newRed
newColor
{1: newRed, 2: orange, 3: yellow, 4: green, 5: newColor}