在Java动态列表或映射中更改对象引用

时间:2013-04-17 12:35:44

标签: java list reference linked-list linkedhashmap

考虑Java动态列表或者像LinkedList,LinkedHashMap,TreeMap等地图。我想任何对象都有一个引用(next->)到下一个对象(我是对的吗?)。为什么在Java中没有办法(例如,方法)访问这些引用(下一个>)?

我担心的是,如果可以,那么LinkedList可以分成两个列表,如魅力,节省了大量的CPU开销。我现在做的是复制List的一部分(新的Sublist()...)然后清除原始List中的相应条目。

3 个答案:

答案 0 :(得分:2)

  

我担心的是,如果可以,那么LinkedArrayList就可以了   分成两个列表,如魅力,节省了大量的CPU开销。什么   我现在做的是复制List的一部分(新的Sublist()...)和   然后我清除原始列表中的相应条目。

如果您这样做,您将在列表的API之外修改列表的内部数据结构,因此列表的其他内部参数将不同步。换句话说,组成链表并保存放入列表中的对象的节点对列表是私有的;即,当您创建LinkedList实例时,您无法访问节点。

答案 1 :(得分:1)

访问“下一个”指针是一个实现细节。你是对的,它会保存性能,但从面向对象的角度来看,你不应该依赖这些细节。毕竟,实现可能完全不同,甚至没有下一个指针。 如果您担心性能,则应实施自己的特定解决方案,或使用不同的方法/语言。

答案 2 :(得分:0)

不同的集合类有关于如何访问集合中的各个对象的不同实现。对于前者Arraylist类将各个对象存储为Object数组,而LinkedList类使用内部类Entry存储单个对象。但是,这些成员被封装并标记为私有,因此程序员看不到它们。这背后的主要原因是为程序员提供了一组简单的方法来执行各种操作,而无需关心如何实现该方法。

  

我担心的是,如果可以,那么LinkedList可以分成两个列表,如魅力,节省了大量的CPU开销。我现在做的是复制List的一部分(新的Sublist()...)然后清除原始List中的相应条目。

通常情况下,您不会掌握管理集合的成员并执行拆分等操作。但是,如果您仍然想要访问这些成员来提高性能,您可以随时创建自己的类,这样您就可以获得“下一个”。您可以随时调整预定义类中的现有代码,例如LinkedList并创建自己的类,例如MyLinkedList。或者你可以扩展这些类并编写自己的方法。