【问题标题】:smart way to save team members拯救团队成员的聪明方法
【发布时间】:2022-01-30 01:26:00
【问题描述】:

我想要一份包含团队成员的团队列表。
(我正在用java编写示例代码,但解决方案不必使用java。)
像这样:

class Member {
    
}

class Team {
    ArrayList<Member> members;
}

ArrayList<Team> teams;

如果我想访问一个团队的所有团队成员,那将非常简单。
但是如果我想查看某个成员属于哪个团队呢?
我不想每次都遍历所有团队成员。

我可以将每个成员的团队保存在成员的班级中,但这不是很愚蠢吗?

【问题讨论】:

  • 它可能并不愚蠢。您还可以创建一个关联数组,将成员映射到他们的团队。
  • 如果一个成员是多个团队的成员怎么办?搜索时迭代没有问题,或者只使用streamss。
  • 这能回答你的问题吗? Datastructure to store bidirectional relationship
  • 我认为在Member 中包含团队变量比使用HashMap 更好

标签: java list architecture


【解决方案1】:

使用双向关联。您将需要额外的方法来确保数据保持一致。在示例中,我通过将newMember 方法添加到Team 来解决此问题,但也可以通过添加设置团队并同时更新成员列表的设置器来解决此问题。

class Member {
    final Team team;

    Member(Team team) {
        this.team = team;
    }
}

class Team {
    ArrayList<Member> members;

    public Member newMember() {
        Member member = new Members(this);
        members.add(member);
        return member;
    }
}

【讨论】:

  • 是的,我很担心,因为我认为每个成员都会存储团队的完整副本,而不是像 java 中通常那样对它进行引用...谢谢!
  • 是的,这通常不是问题。为equalshashCode 之类的方法生成代码时必须小心。然后你需要忽略关系一侧的属性。
【解决方案2】:

只需使用 String 类型的 Array 和 for 循环即可打印出所有团队和团队成员。

String[][] teams = new String[2][4];//[numer of team][max. number of memebers per team + one]
    
    teams[0][0] = "team1";
    teams[0][1] = "team1Member1";
    teams[0][2] = "team1Member2";
    teams[0][3] = "team1Member3";

    teams[1][0] = "team2";
    teams[1][1] = "team2Member1";
    teams[1][2] = "team2Member2";
    teams[1][3] = "team2Member3";

    //get all members of all teams



    for(int i = 0; i < teams.length; i++){
        System.out.println("team: " + teams[i][0]);
        for(int j = 1; j < teams[0].length; j++){
        System.out.println("\t" + teams[i][j]);
        }
    }

【讨论】:

    猜你喜欢
    • 2018-11-27
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多