有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

字典Java数据结构允许对象上的布尔标志和排序?

我希望有一组对象和布尔值,将对象标记为“已访问”或“未访问”。当然,我想到了地图,它会告诉我一个物体是否已经被访问过。但我也希望对它们进行分类,这样每当我问“谁是访问过的‘最小’对象?”。计算不会太困难,在该数据结构上的max O(n)。 在我非常具体的例子中,我问的是Date对象,但这与此无关。 对象可以随时添加到该数据结构中,并将使用“false”值输入


共 (3) 个答案

  1. # 1 楼答案

    使用SortedSet。访问对象时,将其添加到集合中。要确定是否访问了某个对象,只需使用set.contains()。要找到最小的对象:

    T smallest = set.isEmpty() ? null : set.iterator().next();
    
  2. # 2 楼答案

    您需要的是guava的TreeMultiset,请阅读有关Multiset的内容,TreeMultiset实现维护其元素的顺序。您可以编写一个自定义比较器——首先,您可以访问最频繁的对象

    https://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained

    如果你使用它,你就不会有这样的结构

      Collection<Something, Something>
    

    而且,在实现了一个比较器之后,排序也将是开箱即用的

  3. # 3 楼答案

    您可以使用<Boolean, TreeSet<Object>>的映射,将集合中所有访问的对象映射到true,反之亦然(假设您没有处理重复的对象)。我相信插入到TreeSet的时间是O(n)时间,要访问“最小”的对象,可以使用first(),它在O(1)时间内运行