Java 查找队列中名称的唯一计数

Java 查找队列中名称的唯一计数,java,queue,Java,Queue,在这个队列中,我对如何计算唯一名称的数量感到困惑。示例:(James,John,James,Ken,Debbie,Ben)在数组中,我假设收到4个唯一名称的结果(唯一名称是John,Ken,Debbie,Ben)。但是我不知道如何计算Java中唯一的字符串名 import java.util.Queue; import java.util.Scanner; public static void main(Queue<String> args) { Queue<Stri

在这个队列中,我对如何计算唯一名称的数量感到困惑。示例:(James,John,James,Ken,Debbie,Ben)在数组中,我假设收到4个唯一名称的结果(唯一名称是John,Ken,Debbie,Ben)。但是我不知道如何计算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);
}
import java.util.Queue;
导入java.util.Scanner;
公共静态void main(队列参数){
队列a=新队列();
int n=0;

而(n使用
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...
队列名称=新的LinkedList();
//你的代码。。。
Set uniqueNames=新树集(名称);
int numberOfUniqueNames=uniqueNames.size();
//对伯爵做点什么。。。

正如@matoni指出的那样,
集合
类将防止重复。但是关于您的规范,您有一个额外的要求:不应计算非唯一名称。这不能仅通过
集合
来实现(例如,
集合
将包含名称“James”,因此将被计算在内)

我建议使用这个小技巧:将名称插入名为
uniqueNames
HashSet
(一个
Set
的非抽象实现)中。如果
uniqueNames
中已经存在名称,则将它们插入名为
uniqueNames
的单独
HashSet
中,以计算唯一的名称(根据您的定义)您只需从
uniqueNames
的大小中减去
uniqueNames
的大小即可

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())
        );
    }
}
import java.util.HashSet;
公开课考试{
公共静态void main(字符串[]args){
字符串[]名称=新字符串[]{“詹姆斯”、“约翰”、“詹姆斯”、“詹姆斯”、“肯”、“黛比”、“本”};
HashSet uniqueNames=新HashSet();
HashSet ununiquenames=新HashSet();

对于(int i=0;我有任何关于uniqueNames的建议吗?(字符串名称:uniqueNames){}否则修改它并不重要。你是对的,如果我不这样编写代码“Queue names=new LinkedList();”,每个循环都不重要队列将出现一些我无法解决的错误,当我使用您的代码(队列)时,我可以执行“int numberofuniqueNames=uniqueNames.size();”我可以执行System.out.print(“唯一名称的数量为”+numberofuniqueNames)吗我忘了,
Queue
只是一个接口,不能实例化。接口只是一个contract,它表示在使用接口类型的变量时,可以不使用哪些方法。要创建这种类型的对象,需要实例化接口的实现。在
Queue
的情况下,它可以是例如
LinkedList
。还有其他队列实现,但最常见的是
LinkedList