0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Javaのデータ構造の選定でいつも迷ってしまう。

Last updated at Posted at 2023-10-28

いろいろあるからね、しょうがないよね?

注意

  • 当記事では、私が普段よく使うデータ構造の話だけをしています。当記事で触れられていない技術もこの世にはたくさんあります。
  • 当記事には「これはあまり使わない」や「こうすればよさそう」といった個人的見解が多く含まれていますが、これは普段私がコーディングしている現場での話であり、私にとって無用なものも私以外にとっては有用かもしれません。

List(リスト)

  • ArrayList
    • いつものやつ。
  • LinkedList
    • 連結リストなので先頭要素のremoveとかが高速、だがあまり使わないかも。

配列に慣れちゃうと、list.add(5, "hoge"); みたいな感じで途中挿入できることを忘れがち。

Set(集合)

  • HashSet
    • 高速。普段はこっちを使う。
  • TreeSet
    • アイテムが自動的にソートされており、lower()やhigher()が使える。

Setは重複を持てない。既に持っているアイテムを再びaddしても何も起きない(例外発生もしない)。
addした順序も覚えていない(get()のようなメソッドが無い)。
Listと比べるとcontainsやremoveが高速。

Map(連想配列)

  • HashMap
    • いつものやつ。put順序は覚えていない。
  • LinkedHashMap
    • put順序を覚えている。
  • TreeMap
    • put順序は覚えず、キーで自動的にソートされる。

map.entrySet() のfor文で中身列挙する際、上記のどれを使っていたかによって順序が異なる。

ちなみに当たり前だがキーは重複できない。既に持っているキーを再びputすると、バリューが上書きされる。

Deque(両端キュー/デック)

  • ArrayDeque
    • スタックとしてもキューとしても使えるやつ。
    • スタックっぽく使うなら…
      • push()で先頭に追加、peek()で先頭を見るだけ、pop()で先頭を削除。
    • 両端キューっぽく使うなら…
      • addFirst()やaddLast()で追加、peekFirst()やpeekLast()で見るだけ、pollFirst()やpollLast()で削除。

Queueを拡張して作られたのがDequeとのこと。特別な理由がない限りDequeを使えばよさそう(Queueは使わなくてよさそう)。

いったん以上。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?