考虑 Java 动态列表或 Maps,如 LinkedList、LinkedHashMap、TreeMap 等。我想任何对象都有对下一个对象的引用(next->)(对吗?)。为什么在 Java 中没有办法(例如方法)访问这些引用(下一个->)?
我担心的是,如果这是可能的,那么 LinkedList 可以像魅力一样分成两个列表,从而节省大量 CPU 开销。我现在要做的是复制列表的一部分(new Sublist()...),然后清除原始列表中的相应条目。
考虑 Java 动态列表或 Maps,如 LinkedList、LinkedHashMap、TreeMap 等。我想任何对象都有对下一个对象的引用(next->)(对吗?)。为什么在 Java 中没有办法(例如方法)访问这些引用(下一个->)?
我担心的是,如果这是可能的,那么 LinkedList 可以像魅力一样分成两个列表,从而节省大量 CPU 开销。我现在要做的是复制列表的一部分(new Sublist()...),然后清除原始列表中的相应条目。
我担心的是,如果这是可能的,那么 LinkedArrayList 可以像魅力一样分成两个列表,从而节省大量 CPU 开销。我现在要做的是复制列表的一部分(new Sublist()...),然后清除原始列表中的相应条目。
如果这样做,您将在列表的 API 之外修改列表的内部数据结构,因此列表的其他内部参数将不同步。换句话说,构成链表并持有你放入链表的对象的节点是链表私有的;即,当您创建LinkedList
实例时,您无法访问节点。
访问“下一个”指针是一个实现细节。你是对的,它会节省性能,但从面向对象的角度来看,你不应该依赖这些细节。毕竟,实现可能完全不同,甚至没有下一个指针。如果您担心性能,您应该实现自己的特定解决方案,或使用不同的方法/语言。
不同的集合类对于如何访问集合中的各个对象有不同的实现。例如。该类Arraylist
将各个对象存储为 Object 数组,而LinkedList
该类使用内部类Entry
来存储各个对象。但是,这些成员被封装并标记为私有,因此它们对程序员不可见。这背后的主要原因是为程序员提供了一组简单的方法来执行各种操作,而无需关心方法是如何实现的。
我担心的是,如果这是可能的,那么 LinkedList 可以像魅力一样分成两个列表,从而节省大量 CPU 开销。我现在要做的是复制列表的一部分(new Sublist()...),然后清除原始列表中的相应条目。
通常,您不会获得管理您的集合并执行拆分等操作的成员。但是,如果您仍然想访问这些成员以提高性能,您可以随时创建自己的类,这样您就可以掌握“下一个”。您可以随时调整预定义类中的现有代码,例如LinkedList
创建自己的类,例如MyLinkedList
. 或者您可以扩展这些类并编写自己的方法。