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