다수의 데이터를 처리할 수 있는 자료구조 - 컬렉션 (List, Set, Map)

 

  • 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}