BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Java Collections, Skip ListsとGoogle

Java Collections, Skip ListsとGoogle

その重要さが軽視されてしまうことが多々あるが、Java Collections APIは日々のJavaソフトウェア開発において大変重要な役割を果たしている。APIとその関連プロジェクトは常に動いているのである。Alex Miller氏は下記の項目を含めて最近Java 6用のAPIの変更点に注目している(source)
  • Deque(サイト・英語)(デックと発音する)と呼ばれる新たなブルンド(double-ended)のキューインターフェースと、それに同時進行するその半身であるBlockingDeque(サイト・英語)。またそれにはArrayDeque(サイト・英語)LinkedBlockingDeque(サイト・英語)のような実装が伴う。
  • TreeSetTreeMapのようにそれをサポートするために後から装備された以前の実装とともに、NavigableSet(サイト・英語)NavigableMap(サイト・英語)と呼ばれるソートされたセットとマップ用の新たに改善されたインターフェースの実装。
  • 同時進行でソートされたインターフェース用に新たに統合されたインターフェース:ConcurrentNavigableSetConcurrentNavigableMap(サイト・英語)。それに加えて、ConcurrentSkipListSet(サイト・英語)ConcurrentSkipListMap(サイト・英語)と呼ばれる新たな二つの同時進行のソートされた実装を伴っている。

その中でも、最も彼の興味をそそったのはSkipListであり、これは他のCSデータストラクチャとは違い比較的新たな発明である。

William Pugh氏によって1990年に発明されたスキップリストは、バイナリ-サーチツリーと肩を並べる能率を備えたパラレルリンクリストに基づいた、確率的なデータストラクチャである(order O(log n)がほとんどの動作における平均時間である。)。

また、Googleは標準のJavaCollectionFramework(サイト・英語)上で構築するクラスのセットをリリースするのに使ったたくさんのコレクションにおいて、かなり努力していた。これはアルファ版のリリース(サイト・英語)であるが、Googleは既にGMail、Reader、Bloggerのようなツールでそのサービス一式を利用している。既にあるJavaCollectionsFrameworkに複雑性と柔軟性を与えることに重点を置き、Googleはコードがより読みやすく、また使いやすいユーティリティクラスと同様に無数のコレクションを新たに付け加えている。

そのなかでも最も注目すべきコレクションは下記のとおりである。

  • BiMap-ユニークな値とインバースビューをサポートするマップ
  • マルチセット-Listのように複製された値を含んでいる可能性のあるコレクションだが、それにはSetのような独立型オーダー均等性を持ち合わせている。また、良くヒストグラムを表すのに使用される。
  • マルチマップ-Mapに似ているが複製されたキーを含んでいる可能性があり、また更に詳しいビヘイビアを提供するSetMultimapListMultimapのサブタイプを備えている。
  • ClassToInstanceMap-キーがクラス直定数であり、バリューがこれらのタイプのインスタンスとなる専門化されたマップ
Googleはまたこれらの新しいコレクションと一緒に働くたくさんのユティリティクラスも付け加えた。それには下記のものが含まれている。

  • Comparators-ナチュラルオーダー、コンパウンド、ナルフレンドリー、アドホック・・・
  • IteratorsとIterables-要素ベースの均等性、サイクル、コンキャット、パーティション、プレディケートを伴うフィルター、ファンクションを伴うトランスフォーム・・・
  • リスト、セットとマップ-たくさんのファクトリーメソッド他
  • PrimitiveArrays-primitive arraysの"boxing"/"unboxing"
  • Object.イコールとハッシュコード-null値のハンドリング機能を内蔵
Public Objectはグーグルコレクションライブラリを使用してたくさんのサンプル(source)を記述した。このサンプルには使用されているJavaCollection/Utilitiesを伴うコードの断片と、グーグルコレクションライブラリを使用したときコードがどのように見えるかという例によって成り立っている。MultiMap(サイト・英語)とObject.equalとハッシュコード(サイト・英語)は、ライブラリがどのように使用するかということに関する安心感を与える。

グーグルコレクションライブラリはJDKインターフェースを実装しており、今日では1.5JDKを使用し、また将来的にはJDK1.6を使用した開発が考慮されている。完全なAPI(サイト・英語)とFAQ(サイト・英語)も入手可能となっている。

原文はこちらです:http://www.infoq.com/news/2007/10/collections-api

この記事に星をつける

おすすめ度
スタイル

BT