2014-03-25 65 views
-1

我有一個問題,我有一些數據,並有一個類屬性(將有類,兩個,三種類型,所以它沒有定義), ,我想統計班級頻率。所以如果我發現新類型的類,我需要將它保存在字典中,但如果我發現已經在字典中的類,我應該增加計數。 那麼如何使用java處理它?使用字典計算數據的頻率

這裏是

data 1 class X 
data 2 class Y 
data 3 class X 

所以字典應該保存類X是2,和Y類爲1 但類類別的數量的頻率不限定它可以是X或X的例子,Y或X,Y,Z

+1

您的問題,真不明白,你有一些代碼來告訴我們?一些示例數據? –

+0

聽起來像整數散列圖 –

回答

1

可以使用HashMap存儲時間的數,你發現每一個類:

final String data = "data 1 class X\ndata 2 class Y\ndata 3 class X"; 
final Scanner sc = new Scanner(data); 
final HashMap<String, Integer> classes = new HashMap<String, Integer>(); 
while (sc.hasNextLine()) { 
    final String line = sc.nextLine(); 
    final String clazz = line.substring(line.indexOf("class")+6); 

    if (!classes.containsKey(clazz)) 
     classes.put(clazz, 0); 
    classes.put(clazz, classes.get(clazz)+1); 
} 

for (Entry<String, Integer> entry : classes.entrySet()) 
    System.out.println("Class "+entry.getKey()+" found "+entry.getValue()+" time(s)."); 

輸出:

Class Y found 1 time(s). 
Class X found 2 time(s). 
0

看起來像你正在分類的東西。這裏是一個版本(類似弗洛朗培爾的,而是一個完整的工作示例,只需要提供你的文件名):

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.concurrent.atomic.AtomicInteger; 

public class Classify { 
    public static void main(String[] args) throws Exception{ 
     BufferedReader reader=new BufferedReader(new FileReader("YOUR_FILENAME")); 
     String line; 
     Map<String,AtomicInteger> classByCount=new HashMap<>(); 
     while ((line = reader.readLine()) != null) { 
      final String[] lineArray = line.split("\\s"); 
      String clazz=lineArray[lineArray.length-1]; 
      AtomicInteger count=classByCount.get(clazz); 
      if(count==null)classByCount.put(clazz,(count=new AtomicInteger(0))); 
      count.incrementAndGet(); 
     } 
     for(Map.Entry<String,AtomicInteger> entry:classByCount.entrySet()) 
      System.out.printf("class '%s':%d\n",entry.getKey(),entry.getValue().get()); 
    } 
}