私はJavaプログラミングには比較的慣れていませんが、C++の経験があります。特定のアイテムの配列を検索したいのですが、同じ特定のアイテムが複数ある場合はどうなりますか? 一時配列を使用して、見つかったすべてのアイテムを配列に格納し、一時配列を返すのが最善でしょうか?
注:メモリ管理と速度でこれを行う最善の方法を見つけようとしています。そして、それは在宅勤務のためではありません:)
私はJavaプログラミングには比較的慣れていませんが、C++の経験があります。特定のアイテムの配列を検索したいのですが、同じ特定のアイテムが複数ある場合はどうなりますか? 一時配列を使用して、見つかったすべてのアイテムを配列に格納し、一時配列を返すのが最善でしょうか?
注:メモリ管理と速度でこれを行う最善の方法を見つけようとしています。そして、それは在宅勤務のためではありません:)
多くの問題を解決する apache commons lib を使用します。述語でフィルタリングしてサブ配列を選択する場合は、これを使用します
CollectionUtils.filter(
Arrays.asList(new Integer[] {1,2,3,4,5}),
new Predicate() {
public boolean evaluate(final Object object) {
return ((Integer) object) > 2;
}
}
);
アイテムを選択したい場合は
CollectionUtils.select(Collection inputCollection, Predicate predicate)
真のJavaの方法を使用 - ナビゲート可能なセットとマップ
NavigableSet<E> subSet(E fromElement, boolean fromInclusive,
E toElement, boolean toInclusive);
Java をスキップできる場合は、Scala の方がずっと簡単です。
scala> val a = Array(4, 6, 8, 9, 4, 2, 4, 2)
a: Array[Int] = Array(4, 6, 8, 9, 4, 2, 4, 2)
scala> a.filter(_ == 4)
res0: Array[Int] = Array(4, 4, 4)
最も簡単な解決策としてグアバライブラリを使用してください:
http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Iterables.html または http://docs.guava-libraries.googlecode.com/git/javadoc/com/ google/common/collect/Collections2.html
を使用するだけArrayList
です。例:
/** Returns all strings starting with the letter a.*/
public static List<String> getStartsWithA(String[] strs) {
List<String> ret = new ArrayList<String>();
for (String s: strs) {
if (s.startsWith("a") || s.startsWith("A")) {
ret.add(s);
}
}
return ret;
}
ArrayList
の内部配列は、より多くのスペースが必要になると動的に大きくなります。
HashMap のような「すぐに使える」実装を使用します。あなたは「検索」と言うので、データ(たとえば整数)を保存できる検索キー(私の提案では文字列)があると思います。
Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();
void storeValue(final String key, final Integer value) {
List<Integer> l = this.map.get(key);
if (l == null) {
synchronized (this.map) {
if (l == null) {
l = new Vector<Integer>();
this.map.put(key, l);
}
}
}
l.add(value);
}
List<Integer> searchByKey(final String key) {
return this.map.get(key);
}
これにより、複数の整数 @ 1 つのキーを格納できます。もちろん、整数以外のオブジェクトを格納することもできます。