はじめに
今回はどちらもコレクションの一つであるList
とSet
の違いについてみていきたいと思います。
どちらも似たようなクラスですが、いくつか違いがあったので特に大きな違いをまとめてみました。
List class - dart:core library - Dart API
Set class - dart:core library - Dart API
Map class - dart:core library - Dart API
では早速いきましょう。
宣言の仕方
まずは宣言の仕方が違います。
// リスト var list = []; var list2 = <int>[]; // Effective Dart曰く、new List()は使わない list = new List<int>(); // Set Set set = {}; var set2 = <int>{}; // Effective Dart曰く、new Set()は使わない set = new Set<int>(); // Map var map = {}; var map2 = Map<String, int>();
List
を使う場合は[]
Set・Map
を使う場合は{}
を使ってインスタンス化します。
またnew List()
みたいな書き方は好まれないらしいです。
Effective Dart | Dart
一意性
重複した要素を持てるかどうかにも違いがあります。
- リストは重複要素を持てる
Set
は重複要素を持てないMap
は重複要素を持てない
var list = <int>[]; list.add(1); list.add(2); list.add(2); print(list.length); // 3 var set = <int>{}; set.add(1); set.add(2); set.add(2); print(set.length); // 2 var map = Map<String, int>(); map['hoge'] = 1; map['fuga'] = 2; map['fuga'] = 2; print(map.length); // 2
順序つけ
順序つけとは何番目の要素は何であるというのが分かるか否かについてになります。
- リストは順序付きコレクション
Set
は場合による(デフォルトは順序付き)Map
は場合による(デフォルトは順序付き)
var list = <int>[]; list.add(1); list.add(2); print(list[0]); // 1 var set = <int>{}; set.add(1); set.add(2); print(set.elementAt(0)); // 1 var map = Map<String, int>(); map['hoge'] = 1; map['fuga'] = 2; print(map.values.elementAt(0)); // 1
Set
,Map
はデフォルトではLinkedHashMap
クラスによって実装されています。
これを用いると順序が付きますが、これを変更することもでき順序付いていない場合もあるので注意が必要です。
さいごに
公式ドキュメントが英語なので間違って解釈してしまったところもあるかもしれませんが、なにかありましたらコメント等で教えていただけると嬉しいです。
あとまだまだ違いはいっぱいあるので追加もするかも。
ではまた。