我有这样定义的SortedSet:
SortedSet<RatedMessage> messageCollection = new TreeSet<RatedMessage>(new Comp());
Run Code Online (Sandbox Code Playgroud)
我有一个RatedMessage []数组
我必须使用数组,因为集合错过了序列化功能,现在我需要重新构建它.
有没有一种快速的方法可以将数组中的所有项目再次添加到集合中?
来自Java Collections Framework的Java教程的练习要求使用SortedSet来消除参数的重复,并指定Comparator,以便在排序和标识set元素时忽略大小写.
这是确切的要求:"获取FindDupsexample并修改它以使用SortedSet而不是Set.指定一个Comparator,以便在排序和识别set元素时忽略大小写."
这是FindDupsExample:
import java.util.*;
public class FindDups {
public static void main(String[] args) {
Set<String> s = new HashSet<String>();
for (String a : args)
s.add(a);
System.out.println(s.size() + " distinct words: " + s);
}
}
Run Code Online (Sandbox Code Playgroud)
我能想出的最多可以达到预期的行为(通过考虑用小型大写字母写一次的单词来消除重复,而另一次用大大写字母作为副本来消除重复)是下面的代码,但我对如何使用比较器毫无头绪和SortedSet.我在我的例子中使用了SortedSet,但我可以很好地使用一个简单的Set:
public class FindDups {
public static void main(String[] args) {
Set<String> s = new HashSet<String>();
List<String> list = new ArrayList<String>();
SortedSet<String> eliminatedDups = null;
for (String a : args) {
s.add(a);
list.add(a.toLowerCase());
}
eliminatedDups = new TreeSet<String>(list);
System.out.println(s.size() + " distinct …Run Code Online (Sandbox Code Playgroud) 我想知道如何在Redis中存储对象列表。那就是我有这样的钥匙。
users:pro
{
name: "Bruce", age: "20", score: 100,
name: "Ed", age: "22", score: 80
}
Run Code Online (Sandbox Code Playgroud)
我将在其中存储哈希列表作为特定键的值的位置。我想将该score字段用作排序集中的得分字段。我该怎么做?
我见过为键编写一个散列,但是如果我想要多个散列并且散列之一必须用作已排序集的分数字段,该怎么办?
为什么我会在 aredis sorted set上使用按 unix 时间戳排序的a of 文章redis list并将元素推送到它上面。它们似乎提供了相同的最终结果。我注意到的一件事是,redis sorted set您可以与其他集合和 zset 进行交集
我正在尝试预测使用排序集时 Redis (v6.2.5) 集群上的内存使用情况。从我最初的研究中我可以看出,密钥的长度、每个单独元素的长度以及每个单独分数的长度都会对内存使用产生影响。
这是我到目前为止所拥有的:
我可以看到一种模式,但我希望 Redis 专家可以帮助我在源代码中或通过解释 Redis 中排序集的实现来理解这一点。
FWIW,我发现这表明分数存储为长度为128的字符数组。https://github.com/redis/redis/blob/c5e6a6204c4cf57f85e7c83a9b4e99f1a7204fd2/src/t_zset.c#L1029
任何帮助表示赞赏。
该场景是事件的时间线,我希望能够查询特定日期范围内的所有项目。
我正在寻找 .NET(最高 v4.0)中的数据结构,该结构将项目存储为排序且唯一的(例如,通过使用比较器或唯一键)。它应该支持不超过对数复杂度的添加/删除,并以该复杂度执行二分搜索。
System.Collections.Generic.SortedSet看起来像我想要的,但它的GetViewBetween()方法返回一个包含项目的列表,作为 SortedSet。
我遗漏了两件事:
ToList()或枚举 SortedSet 的成本太高,因为列表很长。我需要方法返回 a List<T>,而不是 a SortedSet<T>。如果您知道一个包含这样的数据结构的好库,并且经过测试并且熟悉,我肯定会尝试一下。
谢谢。
我正在使用 Redis 排序集来存储我正在处理的项目的排名。我们没有预料到(!)我们想要如何处理关系。Redis 按字典顺序对具有相同分数的条目进行排序,但我们想要做的是对具有相同分数的所有条目给予相同的排名,例如在以下情况
redis 127.0.0.1:6379> ZREVRANGE foo 0 -1 WITHSCORES
1) "first"
2) "3"
3) "second3"
4) "2"
5) "second2"
6) "2"
7) "second1"
8) "2"
9) "fifth"
10) "1"
Run Code Online (Sandbox Code Playgroud)
我们要考虑second1、second2和,second3因为它们都具有位置 2,并且fifth具有位置 5。因此,第三或第四位置没有条目。 ZREVRANK在这里没有用,那么获得我正在寻找的号码的最佳方法是什么?
sorted-setClojure 有一个创建对象的函数PersistentTreeSet。顾名思义,sorted-set创建唯一对象的排序集合。
排序集什么时候有用?什么时候使用sorted-setandsort更好distinct?
=> (apply sorted-set [2 2 1 1 3 3])
#{1 2 3}
=> (sort (distinct [2 2 1 1 3 3]))
(1 2 3)
Run Code Online (Sandbox Code Playgroud) 好吧,假设我有一个 int 类型的强类型 SortedSet。我想找到集合中小于x的最大数字。
也许这是错误的数据结构,但我的直觉是我有一个排序的集合。我应该能够通过 .NET 框架进行此类搜索,这当然有意义吗?
我有一个 SortedSet,我要向其中添加项目(以不受控制的顺序,显然利用了它的排序能力)。
集合中的物品总是按顺序使用和移除,一次一个。
set.Min.Process();
set.Remove(set.Min);
Run Code Online (Sandbox Code Playgroud)
然而,我面临的问题是由于 Remove 方法的 O(log n) 方面以及 SortedSet 的二分搜索性质,这导致每次删除时进行最大可能的比较次数(~log n )。
对我来说,基于访问最小和最大项目的集合没有有效的方法来删除它们,这似乎很奇怪。
实际上,我所追求的是 set.RemoveMin() 方法,利用更优化的方法(无比较)来获取第一个元素。
有什么办法可以做到这一点吗?是否有我可以利用的现有替代 SortedSet 实现?