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

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中返回内存位置的差异?

hhyyoo 回答:如何按存储位置对集合中的对象进行排序?

为什么要按元素的内存地址排序。您不能依靠它,因为它会随着时间而改变。 Read here

,

(纯)Java程序无法使用对象的内存位置。

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

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

本文链接:https://www.f2er.com/2375400.html

大家都在问