【问题标题】:Temp store an object in java在java中临时存储一个对象
【发布时间】:2012-01-06 17:41:42
【问题描述】:

是否可以临时存储一个对象?

我打算做的是临时存储一个对象,删除原始对象然后将临时对象放在其他地方?

所以这给人的印象是我正在有效地“移动”对象。

非常感谢,

【问题讨论】:

  • 这里可能已经晚了,但我不明白。你介意改写一下吗?
  • 定义“移动”。定义“其他地方”。
  • 基本上,我有一个球队的数组列表和一个球员的数组列表。我想创建玩家的临时副本,将其从该团队中删除,然后将副本重新添加到新团队
  • 我也不确定我明白你在说什么。你的意思是你想使用一个临时变量在其他两个变量之间交换对象吗?
  • 为什么不能直接将玩家添加到 B 队并从 A 队移除?

标签: java object store move


【解决方案1】:
Player tempPlayer = new Player();
tempPlayer.setValueA() = originalPlayer.getValueA();
// copy all values this way
team.remove(originalPlayer);
// more code
team2.add(tempPlayer);

这个答案看起来好吗?

【讨论】:

    【解决方案2】:

    如果我理解正确,您有两个列表:

    ArrayList<Player> team1, team2;
    

    并且您想将玩家从team1 移动到team2


    您似乎想向新团队添加一份副本,而不是原件。略有改动:

    有两种方法可以做到这一点,短的方法和清晰的方法。无论哪种方式,您都需要播放器的索引。您可能想要清晰的方式:

    Player oldPlayer = team1.remove(playerIndex);
    Player newPlayer = oldPlayer.clone();
    team2.add(newPlayer);
    

    供参考,更快的方法是:

    team2.add(team1.remove(playerIndex).clone());
    

    虽然这确实需要您实现Cloneable 接口。

    【讨论】:

    • 感谢您的帮助,但我有一个团队列表和球员列表。
    • 那么你将播放器从哪里移动到哪里呢?玩家所在的队伍是Player 对象中的一个字段吗?
    • 遍历每支球队并以这种方式添加一名球员,以便每支球队都有其独特的球员。所以理论上我认为我需要一些如何迭代,复制球员,将其从球队中移除。然后再次迭代,直到找到想要的队伍再重新添加玩家副本?
    【解决方案3】:

    这假设您打算从 A 队转移到 B 队的球员是 A 队中的第 k 个球员(从 0 开始计数,即第一个球员 k=0 等):

    ArrayList<Player> teamA = ... // contains player p
    ArrayList<Player> teamB = ... // does not contain player p
    Player p = teamA.get(k);
    teamB.add(p);
    teamA.remove(p); // Note: you can also use index
    

    可能有其他方法可以访问您打算移动的播放器,具体取决于上下文。更多可用方法请参见ArrayList

    【讨论】:

      【解决方案4】:

      我知道我来晚了,但对于发现自己在这里的其他人:

      在这种情况下最实用的是StacksDeques。 这些允许您将对象添加到堆栈中,然后弹出它们以删除它们。 Stacks 的工作方式与 Deques 几乎相同,但在编码方面,Deques 实际上比 Stacks 更灵活且更受欢迎。

      【讨论】:

        猜你喜欢
        • 2012-02-24
        • 2023-03-16
        • 1970-01-01
        • 2015-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-05
        相关资源
        最近更新 更多