리스트는 순서를 보장하고 있는 객체들의 정렬된 집합이다. 순서대로 꺼내올 수 있고 일반적으로 객체들을 순회하면서 처리를 해준다.
final bankAccounts = [
bankAccountShinhan1,
bankAccountShinhan2,
bankAccountShinhan3,
bankAccountToss,
bankAccountKakao
];
main() {
print(bankAccount[3].accountTypeName);
// 리스트 순회시키는 방법
for(final item in bankAccounts) {
print(item.accountTypeName);
}
}
맵은 중괄호로 선언을 해주고, key와 value 형태로 선언을 해준다. 각각의 key와 value는 어떤 타입이든 넣을 수 있다. 맵도 순회가 가능하지만 조심해야할 부분은 순서가 항상 보장되어 있는 것은 아니기 때문에 map의 형태에 따라서 조심해서 사용해야한다.
final shinhanBank = bankMap["shinhan1"];
print(shinhanBank == bankAcoountShinhan1);
// true 출력
//맵 순회 시키는 방법
for(final entry in bankMap.entries){
print(entry.key + ":" + (entry.value.accountTypeName ?? ""));
//nullable인 객체는 더하기 연산자가 허용되지 않으므로 만약 null일때 출력해야할 값을 지정해줘야함
//비어있는 객체 "" 를 사용하거나 확실하게 널이 아닌값을 대신해서 적어줄 수 있다.
//print(entry.key + ":" + (entry.value.accountTypeName ?? entry.value.bank.name));
}
final bankMap = {
"shinhan1" : bankAcoountShinhan1,
"shinhan2" : bankAcoountShinhan2
};
set은 list와 map 그 중간 지점에 있다. 중괄호로 표현하며 리스트처럼 나열을 해주면 된다.
set은 데이터를 가져오기위해서 사용하지 않고 보통 데이터가 존재하는지 체크하는 용도로 제일 많이 사용한다.
존재하는지 여부를 판단하는 것은 contains라는 함수를 보통 사용한다. list와 set 모두 contains 함수가 있으나 시간복잡도에 따라서 달라진다. list는 한바퀴 모두 순회하지만(O(n)) set은 해시테이블을 통해서 즉시 있는지 없는지를 판단(O(1))할 수 있다. 그리고 list는 중복을 허용하고 map과 set은 중복을 허용하지 않는다.
final bankSet = {
bankAccountShinhan1,
bankAccountShinhan2,
bankAccountShinhan3,
bankAccountToss,
bankAccountKakao
};
//시간복잡도에 따른 list 와 set의 contains 사용
print(bankSet.contains(bankAccountShinhan1));
print(bankAccounts.contains(bankAccountShinhan1));
bankAccounts.toSet()
bankSet.toList()