Java 计算向量中唯一值的数量

Java 计算向量中唯一值的数量,java,Java,我有一个方法,它以向量的形式从另一个向量中获取参数。该向量的大小可以是2、3或4个元素 我想计算向量中每个单词的频率。例如,如果向量包含字符串:“hello”、“my”、“hello”,则我希望输出一个 [2,1]其中2是hello的频率,1是my的频率 以下是我在阅读了本网站上的几个问题后的尝试: int vector_length = query.size(); int [] tf_q = new int [vector_length]; int string_see

我有一个方法,它以向量的形式从另一个向量中获取参数。该向量的大小可以是2、3或4个元素

我想计算向量中每个单词的频率。例如,如果向量包含字符串:“hello”、“my”、“hello”,则我希望输出一个 [2,1]其中2是hello的频率,1是my的频率

以下是我在阅读了本网站上的几个问题后的尝试:

    int vector_length = query.size();
    int [] tf_q = new int [vector_length];
    int string_seen = 0;

    for (int p = 0; p< query.size(); p++)
    {
        String temp_var = query.get(p);

        for (int q = 0; q< query.size(); q++)
        {
            if (temp_var == query.get(q) )
            {
                if (string_seen == 0)
                {
                    tf_q[p]++;
                    string_seen++;
                }

                else if (string_seen == 1)
                {
                    tf_q[p]++;
                    string_seen = 0;
                    query.remove(p);
                }
            }
        }
    }

    System.out.print(Arrays.toString(tf_q));
int vector_length=query.size();
int[]tf_q=新的int[向量长度];
int string_seen=0;
for(int p=0;p

正确的方向是什么?

使用类型的HashMap跟踪计算每个单词的唯一字符串值

String[] vector // your vector
Map<String, Integer> stringMap = new HashMap<String, Integer>();

for (int i = 0; i < vector.length; i++) {
  if (stringMap.containsKey(vector[i]) {
    Integer wordCount = stringMap.get(vector[i]);
    stringMap.put(vector[i], new Integer(wordCount + 1));
  }
  else {
    stringMap.put(vector[i], new Integer(1));
  }
}
String[]向量//您的向量
Map stringMap=newhashmap();
对于(int i=0;i
String[]input={“你好”、“我的”、“你好”、“苹果”、“你好”};
//使用hashmap跟踪字符串的数量
HashMap=newHashMap();
//使用arraylist跟踪输出序列
ArrayList=新建ArrayList();
for(字符串str:input){
if(地图容器(str)){
map.put(str,map.get(str)+1);
}否则{
map.put(str,1);
list.add(str);//如果该字符串以前从未出现过,请将其添加到arraylist中
}
}
int[]输出=新的int[map.size()];
int指数=0;
for(字符串str:list){
输出[索引]=map.get(str);
索引++;
}
for(int i:输出){
系统输出打印LN(i);
}

这应该是你的答案!结果是“int[]output”

如果你想保持每个单词和该单词频率之间的关系,那么我建议你使用一个
HashMap
。例如:

Map<String,Integer> histogram = new HashMap<String,Integer>();
for (String word : query)
{
    Integer count = histogram.get(word);
    if (count == null)
        histogram.put(word,1);
    else
        histogram.put(word,count+1);
}
或者,您可以获得一个仅包含频率的阵列,如果这是您想要的:

Integer[] array = histogram.values().toArray(new Integer[histogram.size()]);
甚至是一个集合,它与任何本机数组一样有用和方便:

Collection<Integer> collection = histogram.values();
Collection=histogram.values();

您似乎不知道如何在Java中比较字符串。请参阅,感谢您的回复。这样做,我是否会重新创建另一个与数组类似的LinkedHashSet,tf_q?当然,我会继续命名!@user3369038您应该使用HashMap。我提供了以下实现。它将键(您的唯一单词)与值关联起来(这些唯一单词的计数)对于集合,不需要进行
包含
检查。集合将为您解决此问题。@Gene感谢有关包含逻辑的信息:)在我仔细阅读问题之前,我意外地编写了一个集合实现。我确定OP实际上是在要求地图更适合的东西,不需要道歉。他更改了问题!Gene,我没有更改问题,其他人编辑了它。@Brian,非常感谢你的回答。不幸的是,它似乎不适合w我将其修改如下:Map stringMap=newhashmap();for(inti=0;IInteger[] array = histogram.values().toArray(new Integer[histogram.size()]);
Collection<Integer> collection = histogram.values();