2017-02-12 61 views
1

在這個隊列中,我很困惑我如何計算唯一名稱的數量。例如:(詹姆斯,約翰,詹姆斯,肯,黛比,本)在陣列中,我想接受4個獨特名字的結果(唯一的名字是約翰,肯,黛比,本)。但我不知道如何計算Java中的唯一字符串名稱。尋找隊列中名稱的唯一計數

import java.util.Queue; 
import java.util.Scanner; 

public static void main(Queue<String> args) { 
    Queue<String> a=new Queue<String>(); 
    int n=0; 
    while(n<5){ 
     System.out.print("Enter name"); 
     a.add(name); 
     n=n+1 
    } 
    System.out.print("the number of unique names are"+ unique.a); 
} 

回答

0

使用Set的一些實現例如TreeSet您可以在此添加全部Queue的商品。 Set結構自動抑制重複。

Queue<String> names = new LinkedList<>(); 
// your code... 
Set<String> uniqueNames = new TreeSet<>(names); 
int numberOfUniqueNames = uniqueNames.size(); 
// do something with count... 
+0

是否有任何建議的事情uniqueNames做(對(字符串名稱:uniqueNames){}否則它不是真正重要的修改權 –

+0

你是對的,for-each循環並不重要有 – matoni

+0

如果我不寫這樣的代碼「Queue names = new LinkedList ();」隊列將有一些錯誤,我無法解決它和我做的部分「int numberofuniqueNames = uniqueNames.size();」我可以只是做System.out.print(「唯一名稱的數量是」+ numberofuniqueNames); –

1

As @matoni指出Set類將防止重複。但是關於你的規格你有一個額外的要求:一個非唯一的名字不應該被計算在內。這不能通過單獨的Set來實現(例如,Set將包含名稱「詹姆斯」,因此將被計數)。

我會建議這個小竅門:您將名稱插入HashSet(非抽象實現Set),名爲uniqueNames。如果uniqueNames中已存在名稱,請將其插入名爲nonUniqueNames的單獨HashSet。要計算唯一的名稱(根據您的定義),您只需減去uniqueNames的大小即nonUniqueNames的大小。

import java.util.HashSet; 

public class Test { 
    public static void main(String []args){ 
     String[] names = new String[] {"James","John","James","James","Ken","Debbie","Ben"}; 
     HashSet<String> uniqueNames = new HashSet<String>(); 
     HashSet<String> nonUniqueNames = new HashSet<String>(); 
     for (int i=0; i<names.length; i++) { 
      if (!uniqueNames.add(names[i])) { 
       // uniqueNames.add failed because the name already 
       // exists in the HashSet. So insert it in nonUniqueNames: 
       nonUniqueNames.add(names[i]); 
      } 
     } 
     System.out.println(
      "The number of unique names is "+ 
      (uniqueNames.size()-nonUniqueNames.size()) 
     ); 
    } 
}