好的我對Java編程相對比較陌生,但在C++方面有以前的經驗。我想爲一個特定項目搜索一個數組,但如果有多個相同的特定項目呢?最好是使用臨時數組來存儲數組中所有找到的項並返回臨時數組?順序搜索
注:我試圖找到與內存管理和速度做到這一點的最佳方式。它不適用於家庭作業:)
好的我對Java編程相對比較陌生,但在C++方面有以前的經驗。我想爲一個特定項目搜索一個數組,但如果有多個相同的特定項目呢?最好是使用臨時數組來存儲數組中所有找到的項並返回臨時數組?順序搜索
注:我試圖找到與內存管理和速度做到這一點的最佳方式。它不適用於家庭作業:)
我會用「準備使用」實施像一個HashMap。你說「搜索」,所以我相信你有一個searchkey(在我的建議中的字符串),你可以存儲你的數據(例如一個整數)。
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);
}
用這個,你可以存儲多個Integers @一個鍵。當然,您可以存儲除整數之外的其他對象。
只需使用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
的內部陣列將隨着更多空間的需要而動態增長。
如果能夠跳過的Java,然後在斯卡拉它會更容易:
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)
使用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;
}
}
);
如果使用這個,如果你想選擇項目(S)使用
CollectionUtils.select(Collection inputCollection, Predicate predicate)
使用真正的Java方法 - 通航集和地圖
NavigableSet<E> subSet(E fromElement, boolean fromInclusive,
E toElement, boolean toInclusive);