LoginSignup
83
79

More than 5 years have passed since last update.

Java データ構造

Last updated at Posted at 2014-04-19

Java のデータ構造で使いそうなものを自分なりにまとめたメモ。
標準ライブラリの他に、Guava 等もまとめの対象です。

java.util.List

  • 順序を持つ
  • 重複要素を許可

ArrayList

  • 内部的には配列
  • 挿入、削除はその要素以降の要素の再配置が行われるため遅い
  • 追加やget(index)は速い

LinkedList

  • 数珠つなぎ構造
  • get(index)は遅い
  • 挿入、削除が速い

org.apache.commons.collections4.list.TreeList

  • 挿入、削除が速い
  • 追加やget(index)も速いが、ArrayList には劣る
  • 挿入・削除が多い場合は LinkedList より TreeList を選択したほうが大抵良いらしい。
  • AVL tree で実装されている

java.util.Set

  • 重複要素を持たない
  • 順序を保証しない

HashSet

  • 順序を保持しない

TreeSet

  • ソートされた順序を保持する。自然順序か指定された Comparator の昇順。
  • Red-Black tree で実装されている

LinkedHashSet

  • 順序は挿入順

java.util.Map

  • key と value が対になった要素を持つ。
  • key の重複は許可されない。
  • 順序を保証しない

HashMap

  • 順序を保持しない

TreeMap

  • key がソートされた順序を保持する。自然順序か指定された Comparator の昇順。
  • Red-Black tree で実装されている

LinkedHashMap

  • key の順序は挿入順。アクセス順にすることもできる。

com.google.common.collect.BiMap

  • value もユニークである Map
  • BiMap#inverse で key と value を入れ替えることができる
  • HashBiMap、EnumHashBiMap、EnumBiMap がある

com.google.common.collect.Multiset (Bag)

  • 重複を許可した Set のようなもの
  • 重複要素の数をカウントするのに便利
  • Bag と呼ばれるものと同じ。org.apache.commons.collections4.Bag など。
  • Set のように扱えるが Set は継承していない
  • HashMultiset、TreeMultiset、LinkedHashMultiset、EnumMultiset がある

com.google.common.collect.Multimap

  • key 重複を許可した Map のようなもの
  • Map に似ているが key - value が1対多
  • Map<key, Collection<value>> の扱いやすい版
  • Map は継承していない
  • ListMultimap系、SetMultimap系 などがある

com.google.common.collect.Table

  • Table<row, column, value> というテーブル構造
  • key が2次元になった Map のようなもの
  • Map<key1, Map<key2, value>> の扱いやすい版
  • ArrayTable、HashBasedTable、TreeBasedTable がある

stack

  • 先入れ後出し(First-In Last-Out, FILO)のデータ構造
  • java.util.Stack や、java.util. Deque の様々な実装を stack として使用できる

queue

  • 先入れ先出し (First-In First-Out, FIFO)のデータ構造
  • PriorityQueue, BlockingQueue など、java.util.Queue の様々な派生がある
83
79
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
83
79