如何按内存位置对集合中的对象进行排序?

How to sort objects in a collection by the memory location?

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);
    }
}

这里我有一个Nodeclass。我希望能够将节点插入 TreeSet 并按它们在内存中的位置对它们进行排序。我如何 return 函数 compareTo 中内存位置的差异?

为什么要按内存地址对元素进行排序。你不能依赖它,因为它会随着时间而改变。 Read here

对象的内存位置不可用于(纯)Java 程序。

即使您使用本机代码或 Unsafe 获取对象的位置,也不能保证 GC 不会移动它...恕不另行通知。因此,如果您要按内存地址对集合中的对象进行排序,则该集合将不会保持有序。

另一方面,您可以使用 System.identityHashCode(Object) 获得一个在对象的生命周期内不会改变的 32 位代码。即使GC移动了对象。