Java计算队列中的唯一值

时间:2015-01-02 10:27:13

标签: java count queue unique

int uniqueCount = 0;
System.out.println("List Cities Visited:");

for(int i = 0; i < num; i++)
{
    System.out.println((i+1)+". "+(String)cityTrack.dequeue());

}

System.out.println("Unique Cities: "+uniqueCount);

基本上,我将城市列表添加到队列中。我将如上所示将其打印出来,并计算出独特城市的数量。有任何想法吗?我对此很陌生。

编辑:解决了。谢谢你们!

4 个答案:

答案 0 :(得分:3)

使用Java 8,流API API支持distinct - 方法。可以使用以下代码:

Collection<String> cities = new ArrayDeque<>();
cities.add("Detroit");
cities.add("NYC");
cities.add("Boston");
cities.add("Boston");

// Count the number of unique cities
final long uniqueCities = cities.stream().distinct().count();

// Prints all of the cities (including duplicates) and removes them from the 
// queue (i.e. performs a dequeue) which is the same way as you showed in the example
IntStream.rangeClosed(1, cities.size())
        .forEach(i -> System.out.println(i + ". " + cities.remove()));

// Prints the unique cities counter
System.out.println("Unique: " + uniqueCities); // -> Unique: 3

distinct - 方法要求正确实施hashCode - 方法(已经为String类实现)。

资源:

提示,如果您需要创建自己的哈希,Objects.hash方法可以正常工作。您可以简单地传递应该属于hashCode

的args
public int hashCode() {
    return Objects.hash(attr1, attr2, attr3);
}

另外,请注意,通过使用remove - 方法(与示例中的dequeue相同),元素将从队列中删除。如果这不是意图,带有计数器的简单循环就会像下面的例子那样做得很好:

AtomicInteger counter = new AtomicInteger(0);
cities.stream()
        .map(city -> counter.incrementAndGet() + ". " + city)
        .forEach(System.out::println);

答案 1 :(得分:2)

  

....并计算有独特城市的数量......

您可以在此处使用Set,因为它只包含唯一元素。

例如

    Queue<Integer> queue = new LinkedList<Integer>();
    queue.add(1);
    queue.add(1);
    queue.add(1);
    Set<Integer> set = new HashSet<Integer>();
    set.addAll(queue);
    System.out.println(set.size());

<强> 输出

1

答案 2 :(得分:1)

就像你在代码中提到的一样。创建一个名为eg的临时队列uniqueCityTrack并检查您已检查并输入的每个。

int uniqueCount = 0;
System.out.println("List Cities Visited:");
CityTrack uniqueCityTrack = new CityTrack();
for(int i = 0; i < num; i++)
{
    System.out.println((i+1)+". "+(String)cityTrack.dequeue());
    while(uniqueCityTrack.hasNext){
        if(!uniqueCityTrack.contain((String)cityTrack.dequeue()){
            uniqueCount++;
        }
    }
uniqueCityTrack.enqueue((String)cityTrack.dequeue());
}

System.out.println("Unique Cities: "+uniqueCount);

答案 3 :(得分:0)

将它们添加到HashSet并获取大小。