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