はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Dart】ListとSet,Mapの違いをみてみる

はじめに

今回はどちらもコレクションの一つであるListSetの違いについてみていきたいと思います。

どちらも似たようなクラスですが、いくつか違いがあったので特に大きな違いをまとめてみました。
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

SetMapはデフォルトではLinkedHashMapクラスによって実装されています。

これを用いると順序が付きますが、これを変更することもでき順序付いていない場合もあるので注意が必要です。

さいごに

公式ドキュメントが英語なので間違って解釈してしまったところもあるかもしれませんが、なにかありましたらコメント等で教えていただけると嬉しいです。

あとまだまだ違いはいっぱいあるので追加もするかも。

ではまた。