我想要一个按集合大小排序的SortedSet集合(在这种情况下设置自己,但不一定是一般).这似乎违反了使比较器与equals()一致的禁止 - 即两个集合可能不相等(通过具有不同的元素),但是与相同的值相比(因为它们具有相同数量的元素).
从理论上讲,我也可以通过比较器的方式对相同大小的组进行排序,但是使用排序不会利用这一点,并且没有真正有用的+直观的方法来比较相同大小的集合(至少,在我的特定情况下),所以这似乎是一种浪费.
这种不一致的情况是否有问题?
我想检查具有给定值的Object是否存在,SortedSet<>但我不明白自定义比较在这里是如何工作的.在List<>.Exists()我可以只使用lambda,但我不能那样做,我没有得到整个界面的东西,而msdn说我需要覆盖int返回功能.
public class Node
{
public int X, Y;
public int rand;
public Node(int x, int y, int r)
{ X = x; Y = y; rand = r; }
}
class Program
{
static void Main(string[] args)
{
SortedSet<Node> mySet = new SortedSet<Node>();
mySet.Add(new Node(1, 2, 90));
Node myNode = new Node(1, 2, 50);
// I want this to check if X and Y are the same
if (mySet.Contains(myNode, interfaceThing))
Console.WriteLine("Sth is already …Run Code Online (Sandbox Code Playgroud) 我有大量的项目存储在 Redis 排序集中(数量级为 100,000),并且更新得相当频繁。这些项目是编码为 JSON 字符串的对象,并且集合中的排序排名是从对象的日期/时间属性派生的(在插入时,通过我的代码)。
集合中的每个项目都有一个 Id 属性(它是编码为字符串的 Guid),它在系统中唯一标识该项目。
当这些项目更新时,我需要更新排序集中的项目,或者删除并重新插入该项目。我遇到的问题是如何找到该项目来执行操作。
我当前正在做的是将排序集的全部内容加载到内存中,在我的代码中对该集合进行操作,然后将完整的集合写回 Redis。虽然这有效,但它不是特别有效,并且如果列表开始变得非常大,则无法很好地扩展。
有人对如何以更有效的方式做到这一点有任何建议吗?我拥有的项目的唯一唯一标识符是项目中编码的 Id 属性。
非常感谢,
理查德.
First 和 Min() 不同
Last 和 Max() 不同
在 foreach 中,排序为
aaa
bbb
ccc
^^
最小()
^^
最大 ()
抄送
如何使 Min() 和 first 相同?
如何使 Max() 和 last 相同?
ss.FirstOrDefault() 不等于 ss.Min()
ss.Reverse().FirstOrDefault() 不等于 ss.Max()
public void SS()
{
SortedSet<string> ss = new SortedSet<string>(StringComparer.OrdinalIgnoreCase);
ss.Add("bbb");
ss.Add("aaa");
ss.Add("^^");
ss.Add("ccc");
foreach (string s in ss)
Debug.WriteLine(s);
Debug.WriteLine(ss.Min());
Debug.WriteLine(ss.Max());
}
Run Code Online (Sandbox Code Playgroud) 来自Leetcode Discussion的算法使用二进制搜索树来保存输入数组中的一系列值,以检查此数组是否包含最多不同于t的值,并且它们的索引最多彼此远离k.
JAVA:
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
if (nums == null || nums.length == 0 || k <= 0) {
return false;
}
final TreeSet<Integer> values = new TreeSet<>();
for (int ind = 0; ind < nums.length; ind++) {
final Integer floor = values.floor(nums[ind] + t);
final Integer ceil = values.ceiling(nums[ind] - t);
if ((floor != null && floor >= nums[ind])
|| (ceil != null && ceil <= nums[ind])) {
return true;
}
values.add(nums[ind]); …Run Code Online (Sandbox Code Playgroud) 我创建了一套特定的dto.
dto名为"NumericValue",并具有以下类成员:1)time:Long 2)value:Double
我有一个名为"点"的集合,我想根据增加的时间对其进行排序,即0,1,2,4,100 ......
附件是代码:
val points: set(NumericValue) = numericValueSet
val setSorted = collection.immutable.SortedSet[Long]() ++ points
Run Code Online (Sandbox Code Playgroud)
我做了以下事情:
但是结果没有按时间排序.
谢谢
当我运行以下代码时:
Student student1 = new Student("Billy", 13);
Student student2 = new Student("Bob", 12);
Student student3 = new Student("Belle", 11);
Student student4 = new Student("Barry", 10);
Student student5 = new Student("Brian", 10);
Student student6 = new Student("Bane", 13);
Collection<Student> students = new HashSet<Student>();
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
students.add(student6);
for(Student student : students)
{
String name = student.getName();
System.out.println(name);
}
Run Code Online (Sandbox Code Playgroud)
它将打印出我的学生对象的名称列表.现在我想按字母顺序排列.我认为它就像使用TreeSet或SortedSet一样简单.
像这样:
Student student1 = new Student("Billy", 13);
Student student2 = new Student("Bob", 12);
Student student3 = new Student("Belle", 11);
Student …Run Code Online (Sandbox Code Playgroud) 我刚刚开始学习c#,并且我正在创建一个程序的问题.
我正在创建一个程序,它将创建一个乐透票数,每个票都带有一个ID和六个随机生成的数字.
这是我创建故障单并将其添加到List的代码.
Random random = new Random();// Random number generator
for (int i = 0; i < 1000; i++)
{
do
{
int randomNumber = random.Next(1, 42);// Create randoms numbers between 1 and 42
ticketNumbers.Add(randomNumber);// Add the random numbers to the ticketNumbers SortedSet
}
while (ticketNumbers.Count< 6);// Stop Adding once the six numbers is reached
CTicket firstTicket;
firstTicket = new CTicket(i, ticketNumbers);// Create ticket object pass i's current value as the ticket id and pass the ticketNumbers sorted set …Run Code Online (Sandbox Code Playgroud) 调用ToArray()/ ToList()on SortedSet<T>保证返回已排序的数组/列表吗?
当我调用这些方法中的任何一个时,我都会得到一个已排序的集合.但是,文档似乎没有提到这种行为.它的开场白说:
表示按排序顺序维护的对象集合.
但我不确定这是否隐含地保证了这种行为.
假设这是保证行为是否安全?或者转换为数组/列表后的顺序实际上是未定义的,完全取决于实现的常识?
是否有一个排序集实现允许在 O(1) 中获取第一个元素?C++ 的 std::set 可以做到这一点,所以我不明白为什么我们不能在 Java 中做到这一点。谢谢!
我有一个SortedSet自定义对象,我想删除第一个元素,我First()从SortedSet集合中的函数.问题是不起作用,我不知道为什么.
有帮助吗?
[编辑]我的代码
URL u = Queue.First(); Queue.Remove(U);
其中URL是自定义类
我想使用SortedSetGrails,但我得到的只是一个MissingMethodException.
包含有序集的类如下所示:
class SystemUser {
SortedSet organisations
// ... some other fields
static hasMany = [organisations: Organisation]
static belongsTo = [Organisation]
}
Run Code Online (Sandbox Code Playgroud)
......以及Comparable像这样实现的类:
class Organisation implements Comparable {
String name
// ... some other fields
static hasMany = [users: SystemUser]
int compareTo(other) {
return name.comparteTo(other.name)
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试保存SystemUser对象时,我收到此异常消息:
groovy.lang.MissingMethodException: No signature of method: java.lang.String.comparteTo() is applicable for argument types: (java.lang.String) values: [ABC]
Possible solutions: compareTo(java.lang.String), compareTo(java.lang.Object)
Run Code Online (Sandbox Code Playgroud)