Ich schreibe jetzt ein Programm in Java, das ist wie ein Server. Ich habe eine MemberController
, in MemberController
es wird Members
von der Datenbank oder aus dem Cache (um Prozess zu beschleunigen). Dies ist ein Beispiel dafür, wie es aussieht:Java - ändert sich die Sammlung immer, wenn ich einen Wert bekomme und ändere
public class MemberController {
private final TMap<Integer, Member> members;
public MemberController() {
this.members = new THashMap<>();
}
public Member getMemberByID(int id) {
if (members.containsKey(id)) {
return members.get(id);
}
// GET DATA FROM DB
members.put(ID, MEMBER);
return MEMBER;
}
Nun Member
enthält ein BadgeController
Objekt, das eine TMap
für die Abzeichen enthält. Beispiel für Member
:
public class Member {
// FIELDS OF MEMBER HERE
private BadgeController badgeController;
public Member(ResultSet set) {
// SET FIELDS
}
public void InitOtherData() {
badgeController = new BadgeController(id);
}
public BadgeController getBadgeController() {
return badgeController;
}
Und BadgeController
:
public class BadgeController {
private final int memberId;
private final TMap<String, Badge> badges;
public BadgeController(int memberId) {
this.memberId = memberId;
this.badges = new THashMap<>();
// LOAD FROM DB
}
public Badge getBadge(String code) {
return badges.get(code);
}
Nun, ich war ein paar Dinge fragen (alle tatsächlich beziehen sich auf das gleiche glaube ich):
Wenn ich a
Member
vonmembers
, wiemembers.get(1)
, und ich bearbeiten das Objekt, so:Mitglied Mitglied = members.get (1); member.setId (1);
Wird das die id
innerhalb des TMap
auch bearbeiten? Also, wenn ich wieder members.get(1)
mache, hat es den aktualisierten Wert?
- Wenn ich das Mitglied von oben, und ich einen Wert des
Badge
ändern, zum Beispiel, das ich tun:
Member member = members.get(1); member.getBadgeController().getBadge('500Members').setActive(true);
Wird dieses Ergebnis in wahr gedruckt werden?
System.out.println(members.get(1).getBadgeController().getBadge('500Members').getActive());
Ich hoffe, meine Erklärung ist gut genug. Es ist schwer für mich, es zu erklären. Es tut mir Leid.
Warum testest du es nicht? Das heißt, Sie sind wahrscheinlich Voroptimierung und öffnen eine große Dose Würmer: Sie müssen jetzt mit veralteten Daten im Cache, gleichzeitigem Zugriff auf eine nicht Thread-sichere veränderbare Datenstruktur, usw. umgehen.Benutze einfach die Datenbank, es ist schnell. –
Ich möchte wissen, ob es immer funktioniert. Und es ist komplex zu erklären und komplex zu testen. Es geht viel tiefer als nur das. –
Ja, es funktioniert immer. Keine Datenstruktur wird jemals Kopien Ihrer Objekte erstellen. Sie speichern nur Referenzen. –