硬java数组情况

时间:2012-02-05 23:03:05

标签: java arrays arraylist

我试图整天计算这个问题,似乎我无法弄清楚如何做到这一点:

List<ArrayList<Word>> words = new ArrayList<ArrayList<Word>>();
  • 单词索引0有:defin 3,countri 1,Chairman 2,year 1,
  • 单词索引1具有:defin 2,build 1,countri 1,round 3
  • 词语索引2具有:杯子3,专利1,第2轮,第2年,

我想要做的是找到属于其他数组的单词并将它们的数字加在一起,然后将其除以第一次出现。

例如:

  • 当index = 0且word = defin - &gt; 3/2 + 0
  • 当index = 0且word = countri - &gt; 1/1的+ 0
  • ....
  • 当index = 1且word = defin - &gt;三分之二+ 0
  • 当index = 1且word = round - &gt; 3/2 + 0
  • ....
  • 当index = 2且word = cup - &gt; 3/0 + 0但必须做3/1所以它不会“破裂”。

3 个答案:

答案 0 :(得分:1)

我很想推荐Guava's Multiset,它通常用于跟踪同一对象的多次出现 - 例如Map<E, Integer>,但麻烦要少得多。

 List<Multiset<String>> words;
 int index;

 Map<String, Double> ratios = Maps.newHashMap();
 for(Multiset.Entry<String> entry : words.get(index).entrySet()) {
   String word = entry.getElement();
   int wordCountIn0 = words.get(0).count(word);
   if (wordCountIn0 == 0) wordCountIn0 = 1;
   ratios.put(word, (double) entry.getCount() / wordCountIn0);
 }

我对你的问题并不是100%明确,但就我所理解的而言,这应该有效。

答案 1 :(得分:0)

我想出了如何做到这一点,而不是效率方面的最佳方式,但它确实有效。无论如何,它不是效率,而是让它“正常工作”。

所以我做的是我循环遍历第一个数组的大小并检查该单词是否属于任何数组。当我发现我存储其频率值。然后我再次浏览阵列,除了我已经找到了第一个单词。我总结了所有频率,最后我跳了第一个频率,但总结了其他频率。

答案 2 :(得分:0)

将数据封装在维护各种数据存储中所有相关数据的类中。

然后通过该对象进行查询。将其视为数据库 - 您拥有核心数据,但您也可以根据使用要求以指定的方式显示数据的索引和视图。