顺序搜索

时间:2012-07-26 05:10:55

标签: java search sequential

好的我对Java编程比较陌生,但有以前的C ++经验。我想搜索一个特定项目的数组,但是如果有多个相同的特定项目怎么办?是否最好使用临时数组来存储数组中所有找到的项并返回临时数组?

注意:我正在尝试通过内存管理和速度找到最佳方法。这不适合家庭工作:))

5 个答案:

答案 0 :(得分:4)

如果你能跳过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)

答案 1 :(得分: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;
                }
            }
    );

如果您想选择项目,请使用

CollectionUtils.select(Collection inputCollection, Predicate predicate)

使用真正的java方式 - 可导航集和地图

NavigableSet<E> subSet(E fromElement, boolean fromInclusive,
                       E toElement,   boolean toInclusive);

答案 2 :(得分:3)

答案 3 :(得分:1)

只需使用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的内部数组将随着需要更多空间而动态增长。

答案 4 :(得分:0)

我会像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);
    }

有了这个,您可以存储多个Integers @ one key。当然,您可以存储除整数之外的其他对象。