グアバ
グアバプロジェクトは、GoogleのJavaプロジェクトによって多数のコアライブラリに大きく依存するから成り
コレクション[コレクション]、キャッシュ[キャッシング]、ネイティブ型のサポート[プリミティブのサポート]、並行処理ライブラリ[同時実行ライブラリ]、共通アノテーション[一般的な注釈]、文字:など文字列を処理し、[文字列処理]、I / Oなどが挙げられます。
グアバ同様のApacheのコモンズツールセット
グアバのメリット
標準化-グアバライブラリーは、Googleによってホストされている
高速で、信頼性が高く、JAVA標準ライブラリの効率的な展開-と効率的な
最適化は非常に-Guavaのライブラリーを最適化されています
オプショナル
グアバは8つの新しいオプションオプションクラスがハンドルnullに使用されるJavaに似ていますが、グアバはその実装クラス有無による抽象クラスであり、そしてjava.utilのは、最終的なクラスです。前記名前の部分は、同じ方法です。
Googleのグアバライブラリの着信パラメータがnull、その後にNullPointerExceptionがスローされている場合は、オプションの静的メソッドを使用するときにnullの可能性があるオブジェクトの上にパッケージの層を作ったオプションのヌル迅速な故障へのインタフェースを提供します。
前提条件
パラメータの簡単な検証のために提供グアバ基本パッケージの前提条件クラスは、彼は次のような方法を提供します:
- checkArgumentは、ブール・パラメータを受け取り、オプションのerrorMsg内容のパラメータは、このメソッドは、パラメータが一定の条件を満たしているかどうかを決定するために使用されてはIllegalArgumentExceptionがスローされますと、条件はグアバは気にしませんgoogleの何に沿って、条件を満たしていません
- checkStateとcheckArgumentパラメータと実質的に同一の達成、文字通りの意味から、我々は状態が正しくない場合、このメソッドは、正しい状態かどうかを判断するために使用されていることを知ることができるには、IllegalStateExceptionがスローされます
- NullPointerException例外がスローされた場合checkNotNullメソッドは引数がヌルでないかどうかを決定するために使用される、ヌルポインタがヌルであります
- checkElementIndex方法は正当ではないが、例外:IndexOutOfBoundsExceptionをスローした場合、それは、正当であるか否かを、ユーザの着信配列インデックスまたはリストインデックス位置を決定するために使用されます
- checkPositionIndexesロールと、この方法以外の方法と同様checkElementIndex方法は0からサイズなどのサイズにインデックス範囲であり、大きさは、上記の方法を含んでいません。
ジョイナー
ジョイナーは、文字列は、操作対象の参加処理するさまざまな方法を提供します。
例ジョイナーの不変のため、スレッドセーフ。
- 上:ステッチ記号の開発
- skipNulls():新規インスタンスのジョイナーを返し、NULLを無視
- useForNull(「こんにちは」):NULLの場所は、「こんにちは」の文字列に置き換えられます
スプリッタ
スプリッタは、反復トラバース、反復処理可能に設定することができ、指定された文字列の区切り文字列に応じて分割することができ
- )(上:指定の区切り文字列が分割され
- 限界():ストリングを分割するリミットストップ分割に到達
- trimResults():サブストリングのスペースを削除
- 固定長():スプリットへの文字列の長さ
- omitEmptyStringsは():空の部分文字列を削除します
- withKeyValueSeparator():キーと値との間の分割文字列の区切りに、細分デリミタ文字列のキーと値との間のデフォルト=
接続設定不変
不変オブジェクトは、を含む多くの利点があります。
- オブジェクトが信頼されていないライブラリ・コールである場合には、不変のフォームは安全です。
- スレッド不変オブジェクトを複数起動されると、競合条件の問題はありません
- 不変集合の必要性は、このように時間と空間を節約し、変更を検討していません。より良いメモリの使用率を持って、その別の形態よりもすべてセット不変。
- 不変オブジェクトがが固定されているので、それは定数として安全に使用することができます。
メソッドの不変のセットを作成します。
- ImmutableSet.copyOf(セット)としてcopyOf方法。
- そのようなImmutableSet.of( ""、 "B"、 "C")またはImmutableMap.ofような方法の( ""、1、 "B"、2);
- Builderツール
新しいコレクション
多重集合の
障害が、繰り返されてもよい多重集合を設定するように見えますが、本質的には、それが設定されていない、それが設定されたインタフェースを継承していない、それが繰り返さ素子を備えた多重集合インタフェースの拡張機能を継承し、これに対処するための実用的な方法を数多く提供しています要素がコレクションに表示されます。
多重集合は、便利な機能が付属して、各オブジェクトの数を追跡する機能です。- マルチマップ
キーマップの多値
Multimapは、簡単にキー複数の値にマッピングすることができます。換言すれば、一般的なように任意の数の値にマッピングされたキーをマルチマップ。例えば:
Multimap<String,Integer> map= HashMultimap.create();
//Multimap是把键映射到任意多个值的一般方式
map.put("a",1);
//key相同时不会覆盖原value
map.put("a",2);
map.put("a",3);
System.out.println(map); //{a=[1, 2, 3]
マルチマップは、実装の富を提供しています。
実現 | 主な実現 | バリュー実現 |
---|---|---|
ArrayListMultimap | HashMapの | 配列リスト |
HashMultimap | HashMapの | HashSetの |
LinkedListMultimap | LinkedHashMap | LinkedListの |
LinkedHashMultimap | LinkedHashMap | LinkedHashSetの |
TreeMultimap | TreeMapの | TreeSetの |
ImmutableListMultimap | ImmutableMap | ImmutableList |
ImmutableSetMultimap | ImmutableMap | ImmutableSet |
- 2領域マップ
双方向地図
我々は、このマッピングは、キー値にマッピングされたが、また、その中で地図2領域マップは最初、彼はユニークです、地図、キーと値のマッピングであることを知っている値マッピングへの鍵を提供するだけでなく、価値を提供するだけでなく、キーマッピングは、それが双方向マップであるように、
マップ値2領域マップ鍵ペアは()メソッド逆によって得ることができます。
共通の達成2領域マップです。 - HashBiMap:鍵の受け渡しと収集値は、HashMapを達成しています
- EnumBiMap:キーと値が列挙型でなければなりません
ImmutableBiMap:非修正2領域マップ
表は、
表には二つの支持体のキーのすべてのタイプがあります:「列」「行」とし
テーブルデータ構造は、行列が希薄スリップすることができ、2次元マトリクスを用いて実施することができます。
集合演算:交差点、違い、およびセット
Set<Integer> set1= Sets.newHashSet(1,2,3,4,5);
Set<Integer> set2=Sets.newHashSet(3,4,5,6);
Sets.SetView<Integer> inter=Sets.intersection(set1,set2); //交集
System.out.println(inter);
Sets.SetView<Integer> diff=Sets.difference(set1,set2); //差集,在A中不在B中
System.out.println(diff);
Sets.SetView<Integer> union=Sets.union(set1,set2); //并集
System.out.println(union);
キャッシュ
多くのシーンでのキャッシュは非常に便利です。計算や取り出しコストの値が高く、入力値の同じ時間に複数のアクセスを必要とするたとえば、あなたがキャッシュを使用することを検討すべきです。
グァバキャッシュとのConcurrentMapは非常に似ていますが、まったく同じではありません。最も基本的な違いは、すべての要素が明示的に削除するまでのConcurrentMapが追加されます保存されているということです。
比較的、制限するために、グアバキャッシュメモリフットプリントは、通常、自動復旧要素に設定します。LoadingCacheは、要素を再利用していないが、それは自動的にキャッシュにロードされますので、いくつかのシナリオでは、それは、また、非常に便利です。
グアバキャッシュメモリは、スレッドセーフな実装メカニズムを提供し、ローカルキャッシュの完全な実現である
あなたはスピードを上げるためにいくつかのメモリ空間を消費したいと思います:グアバキャッシュが適用さ、一般的に言って。あなたは、特定のキーが複数回照会することを期待しています。
キャッシュメモリに格納されるデータの量が超過していません。(グアバキャッシュが...それがファイルまたは外部のサーバーにデータを保存しないことをローカルのキャッシュ単一のアプリケーションランタイムである)
グァバキャッシュを作成する方法は2つあります。
- cacheLoadercallableコールバック
- LoadingCacheDemo:
LoadingCache<String,String> cache= CacheBuilder.newBuilder()
.maximumSize(100) //最大缓存数目
.expireAfterAccess(1, TimeUnit.SECONDS) //缓存1秒后过期
.build(new CacheLoader<String, String>() {
@Override
public String load(String key) throws Exception {
return key;
}
});
- CallbackDemo:
Cache<String,String> cache= CacheBuilder.newBuilder()
.maximumSize(100)
.expireAfterAccess(1, TimeUnit.SECONDS)
.build();