package com.company;
import java.util.TreeSet;
public class Main {
public static class Node implements Comparable<Node>
{
public int value;
public Node(int value) {
this.value = value;
}
@Override
public int compareTo(Node node) {
// Memory location of this - memory location of node.
return 0;
}
}
public static void main(String[] args) {
TreeSet<Node> set = new TreeSet<>();
Node n = new Node(5);
set.add(n);
for (var node : set)
System.out.println(node.value);
}
}
我在这里Node
上课。我希望能够将节点插入TreeSet
,并按其在内存中的位置对其进行排序。如何返回函数中存储位置的差值compareTo
?
对象的内存位置不适用于(纯)Java程序。
即使您使用本机代码或Unsafe
获取对象的位置,也无法保证GC不会移动它...恕不另行通知。因此,如果要按其内存地址对集合中的对象进行排序,则该集合将不会保持排序。
另一方面,您可以System.identityHashCode(Object)
用来获取一个32位代码,该代码在对象的生存期内不会改变。即使GC移动了对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句