【问题标题】:How can I access to the private fields of Java LinkedList Nodes?如何访问 Java LinkedList 节点的私有字段?
【发布时间】:2013-03-30 03:33:20
【问题描述】:

我要实现一个棋盘游戏,它有 17 个位置,它像链表一样“链接”。

所以,我打算为此使用 ArrayList 的 LinkedList。 (LinkedList<ArrayList<String>> 或者……)

但是,它有两个起始位置,在几个节点之后合并,玩家可以选择他们想要从哪个位置开始。(这意味着两个节点的“下一个”字段指向一个节点,一个节点可能(但没必要,我猜?)需要两个“prev”字段。)

另外,我想让最后一个位置旁边的附加节点的“下一个”字段指向自身。

简而言之,我想要一个类似于 LinkedList 的集合类,但有一些突变。

我怎样才能做到这一点?

我的编程水平是初级~中级,学过类似Java Collections Framework的LinkedList定义(但记不太清了……),和c++ std::list用的教科书。

所以我的问题是这些。

我是否有必要实现一个简单的列表(和节点)类,只创建 18 个节点并以我想要设置的方式设置这些节点的私有字段,并将 ArrayLists 添加到其“数据”字段?

另外,我打算使用 Stack 的 LinkedList(因为我只需要最新推送的元素),但我觉得如果我只是创建私有 ArrayList 类并以类似的方式根据我的喜好定制它会更有用使用 ArrayList 类实现 Stack。听起来怎么样?

我担心的是我不是一个很好的程序员,如果我自己定义它们,它们可能不可靠,而且工作也可能非常耗时。(它有截止日期)

有没有更好的方法来实现这一点?(比如,也许扩展标准类??不确定..)

任何建议都将不胜感激。

谢谢。

【问题讨论】:

  • 简而言之,为此编写自己的数据结构。如果 LinkedList 没有暴露它的内部结构,你就不能(好吧,它可以通过一些讨厌的技巧)并且不应该尝试利用它。
  • 例如,LinkedList<T>Serializable(如果 T 是)。它包含一个Node 内部类。但是使用自定义序列化,并且不序列化节点而是序列化各种Ts 本身。试图颠覆节点会破坏序列化。

标签: java data-structures collections linked-list


【解决方案1】:

恐怕您对您正在尝试做的事情(即您的要求)的描述太难以理解。所以我将自己限制在一个笼统的答案上。

如果您真的需要能够对类似列表的数据结构进行“手术”,那么您应该自己从头开始实现它/它们。

尝试通过扩展现有的列表/集合类来做到这一点可能会失败,原因有几个(至少)。

  • 你的代码需要修改的一些东西被声明为private,这使得修改它变得非常困难(并且非常不建议)。 (这不是不可能的,但是你需要做一些讨厌的反射技巧,这会使你的代码变得复杂、脆弱和低效。这不是你应该做的事情,除非绝对没有其他选择。)

  • 即使你成功了,你也会有一个名义上实现一个或多个现有集合接口的数据结构,但(很可能)违反了该接口的约定行为。


我担心的是我不是一个很好的程序员,如果我自己定义它们,它们可能不可靠,而且工作也可能非常耗时。 (有截止日期)

  1. “练习的重点”是学习成为一名更好的程序员......
  2. IMO,您可能会花更多时间做这项工作以避免额外的工作,最终结果将不太可靠
  3. 截止日期令人担忧,但处理它们的最佳方法是尽早开始(假设可以),并尝试以正确的方式解决问题,而不是采取冒险的捷径。

无论如何,我的建议是尝试以正确的方式去做。

  • 如果您未能在截止日期前完成,您的代码仍然看起来不错,并且(希望)应该进行相应的标记。

  • 另一方面,如果您尝试以错误的方式执行此操作,您可能会获得一个工作程序,但仍会因为您以错误的方式完成它而被标记。你可能会失败,而且如果你在尝试正确编写代码时失败了,你的成绩会更糟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 2012-10-03
    • 2013-12-17
    • 2012-06-07
    • 2015-02-26
    • 2021-06-04
    相关资源
    最近更新 更多