プログラマは、以下に基づいてメモリ内のオブジェクト コレクションをクエリする必要がある状況に頻繁に遭遇します。 SQL または条件クエリに似た複雑な条件。一般的なシナリオには、Car オブジェクトのコレクションをフィルタリングして、ナンバー プレートが「AZ」で始まる 1960 年代に製造された車を取得し、結果を車種名で並べ替えることが含まれます。
他の回答で説明されているように、フィルタリングは適切なアプローチですが、スケーラビリティの問題があります。その時間計算量は O(n t) です。ここで、n はコレクション サイズ、t は各オブジェクトに適用されるテストの数です。オブジェクトの追加やクエリの複雑さの増加に伴い、パフォーマンスが低下します。
代替方法には、オブジェクト内のフィールドのインデックスを構築し、集合理論を利用することが含まれます。たとえば、Car.color フィールドにインデックスを作成すると、青い車を O(1) の時間計算量で高速に取得できます。
もう 1 つのアプローチは、「スタンディング クエリ インデックス、 " ここで、クエリは「スマート」コレクションに登録されます。オブジェクトが追加または削除されると、コレクションは登録されたクエリに対して各オブジェクトを評価します。一致するオブジェクトは、クエリ固有のセットに自動的に追加または削除されます。その後、登録されたクエリに一致するオブジェクトを O(1) 時間で取得できます。
CQEngine (コレクション クエリ エンジン) はこれらの概念を具体化しています。 SQL のようなクエリを使用して Java コレクションからオブジェクトを取得するための NoSQL クエリ エンジンを提供し、コレクションを反復処理するオーバーヘッドを排除します。これは、インデックス作成と永続クエリ インデックスなどの技術を利用します。 CQEngine はオープンソースであり、Maven Central で利用できます。
以上がSQL のような構文を使用して Java オブジェクト コレクションを効率的にクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。