java集合中的搜索对象

时间:2011-03-24 16:16:26

标签: java collections

首先,我不知道我是否有效地组织我的数据,我的想法是我有一对键/值。

    public static class Freq implements Comparable {
    String term;
    double frequency;

    public Freq( String term, double frequency ) {
  this.term = term;
  this.frequency = frequency;
    }

    public int compareTo(Object o) {
        if(this.frequency == ((Freq) o).frequency)
            return 0;
        else if(this.frequency > ((Freq) o).frequency)
            return 1;
        else 
            return -1;
    }

现在,我将这些对象存储在一个集合中:List<Freq> bla = new ArrayList<Freq>()并对其进行排序。

我有兴趣搜索特定对象,例如来自集合的Freq.name = 'Bar',已排序。我该怎么办?或者我必须迭代整个集合。

还是有其他更有效的方法吗?

2 个答案:

答案 0 :(得分:3)

您应该使用关联的集合,例如TreeMap,它会自动对其元素进行排序。如果您希望有时根据名称进行搜索,有时甚至可以根据频率进行搜索,可以将元素同时保存在两个地图中,并使用合适的元素进行查找。

或者,如果由于某种原因你想坚持使用排序列表,你可以使用Collections.binarySearch()来查找其中的元素。

答案 1 :(得分:0)

您可以使用JFilter http://code.google.com/p/jfilter/

JFilter是一个简单而高性能的开源库,用于查询Java bean的集合。

主要功能

  • 支持集合(java.util.Collection,java.util.Map和Array)属性。
  • 支持任何深度的集合内的集合。
  • 支持内部查询。
  • 支持参数化查询。
  • 可以在几百毫秒内过滤100万条记录。
  • 过滤器(查询)以简单的json格式给出,就像Mangodb查询一样。以下是一些例子。
    • {&#34; id&#34;:{&#34; $ le&#34;:&#34; 10&#34;}
    • 其中object id属性小于等于10.
    • {&#34; id&#34;:{&#34; $ in&#34;:[&#34; 0&#34;,&#34; 100&#34;]}}
    • 其中object id属性为0或100。
    • {&#34;&了LineItem#34; {&#34; lineAmount&#34;:&#34; 1&#34;}}
    • 其中参数化类型的lineItems集合属性的lineAmount等于1。
    • {&#34; $和&#34;:[{&#34; id&#34;:&#34; 0&#34;},{&#34; billingAddress&#34;:{&#34;城市&#34;:&#34; DEL&#34;}}]}
    • 其中id属性为0,billingAddress.city属性为DEL。
    • {&#34; lineItems&#34;:{&#34; tax&#34;:{&#34; key&#34;:{&#34; code&#34;:&#34; GST&#34 ;},&#34;价值&#34;:{&#34; $ gt&#34;:&#34; 1.01&#34;}}}} 其中参数化类型的lineItems集合属性具有参数化类型的税图属性,其代码等于GST值大于1.01。
    • {&#39; $或&#39;:[{&#39;代码&#39;:&#39; 10&#39;},{&#39; skus&#39;:{&#39; $和&#39;:[{&#39;价格&#39;:{&#39; $ in&#39;:[&#39; 20&#39;,&#39; 40&#39;]}}, {&#39;代码&#39;:&#39; RedApple&#39;}]}}]}
    • 选择产品代码为10或sku价格为20和40的所有产品,并且sku代码为&#34; RedApple&#34;。