この記事は 2026 年 8 月 10 日に投稿しました。

目次
1. はじめに
こんにちは、iOS のエディタアプリPWEditorとその後継PWEditorNextの開発者の二俣です。 2018年5月から毎日技術ブログを更新しています。
今回はDartのHashSetに要素を追加するaddメソッドについてです。
2. DartのHashSetに要素を追加する
DartのHashSetに要素を追加するには、addメソッドを使用します。
addメソッドの形式は以下になります。
bool add(E value)
引数valueに追加する要素を指定します。
実装例
import 'dart:collection'; void main() { final set = HashSet<String>(); set.add('Apple'); set.add('Orange'); set.add('Banana'); print(set); }
実行結果の例
{Apple, Orange, Banana}
この例では、空のHashSet<String>を作成したあと、addメソッドを使用してApple、Orange、Bananaの3つの文字列を追加しています。
なお、HashSetでは要素の順序は保証されないため、実行環境などによって表示される順序が異なる可能性があります。
3. addメソッドの戻り値
addメソッドは、要素を追加すると、その要素が新しく追加されたかどうかをbool型で返します。
新しい要素が追加された場合はtrue、すでに同じ要素が存在していて追加されなかった場合はfalseになります。
実装例
import 'dart:collection'; void main() { final set = HashSet<String>(); final result1 = set.add('Apple'); final result2 = set.add('Orange'); print(result1); print(result2); }
実行結果
true true
AppleとOrangeはどちらも追加前には存在していないため、addメソッドはtrueを返します。
この戻り値を利用することで、要素が新しく追加されたかどうかを判定できます。
例えば、次のように記述できます。
if (set.add('Banana')) { print('Bananaを追加しました'); }
4. 同じ要素を追加した場合
Setは同じ要素を複数保持しません。
そのため、HashSetにすでに存在する要素をaddメソッドで追加しても、同じ要素が増えることはありません。
実装例
import 'dart:collection'; void main() { final set = HashSet<String>(); print(set.add('Apple')); print(set.add('Apple')); print(set); print(set.length); }
実行結果
true
false
{Apple}
1
最初のadd('Apple')では新しい要素が追加されるためtrueになります。
2回目のadd('Apple')では、すでにAppleが存在しているため新しい要素は追加されず、戻り値はfalseになります。
また、同じ値を2回追加しても要素数は1のままです。
このようにaddメソッドの戻り値を利用すると、事前にcontainsメソッドなどで要素の存在を確認しなくても、追加と同時に新しい要素だったかどうかを判定できます。
5. HashSetの要素の順序
HashSetを使用する場合に注意したいのが、要素の順序です。
HashSetでは、要素を追加した順序は保証されません。
例えば、次のように追加した場合でも、
set.add('Apple'); set.add('Orange'); set.add('Banana');
必ずしも、
Apple Orange Banana
という順序で要素を取得できるとは限りません。
追加した順序を保持する必要がある場合は、LinkedHashSetなどの利用を検討します。
一方、要素の順序を必要とせず、値が集合に含まれているかどうかを扱いたい場合にはHashSetを利用できます。
リファレンス
6. おわりに
HashSetに要素を追加するには、addメソッドを使用します。
addメソッドは単純に要素を追加するだけでなく、新しい要素が追加された場合はtrue、すでに同じ要素が存在する場合はfalseを返します。
そのため、要素の追加と追加できたかどうかの判定を同時に行える点も覚えておくとよさそうです。
また、HashSetは同じ要素を複数保持せず、要素の順序も保証されないという特徴があります。
私が技術者として所属している ニューラル では、 組み込み・制御系ソフトウェアを中心に、モバイルアプリや業務アプリなど、さまざまなソフトウェアの開発を行っています。
組み込み分野では、リアルタイムOSを利用したシステム開発をはじめ、弊社製品のハイブリッドOS Bi-OS など、長年培ってきた組み込み・制御系の技術を活かした開発に取り組んでいます。
また、iOS(Swift/SwiftUI)やWindows(C#)をはじめとしたアプリケーション開発、Webシステムの開発などにも対応しています。
組み込みソフトウェア、モバイルアプリ、Windowsアプリ、Webシステムなど、ソフトウェア開発に関するご相談がございましたら、お気軽にお問い合わせください。
また、ニューラルでは一緒にソフトウェア開発に取り組んでいただける技術者の方も募集しています。 ご興味がございましたら、お気軽にお問い合わせください。
EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688