我正在用Java編寫一個程序,它有點像服務器。我得到了一個MemberController
,MemberController
它從數據庫或從緩存中獲取Members
(加速過程)。這是它的外觀的例子:Java - 當我得到一個值並且改變時,集合總是改變
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;
}
現在,Member
包含BadgeController
對象,其中包含了一個徽章TMap
。的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;
}
而且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);
}
現在,我想知道的幾件事(所有,實際上是指我猜想的一樣):
如果我得到一個
Member
從members
,像members.get(1)
,我編輯對象,如下所示:Member member = members.get(1); member.setId(1);
請問這個編輯id
在TMap
裏面嗎?所以如果我再次做members.get(1)
,它有更新的值?
- 如果非要從上面的構件,並且我改變
Badge
的值,例如我做的:
Member member = members.get(1); member.getBadgeController().getBadge('500Members').setActive(true);
請問這個結果在真正被打印?
System.out.println(members.get(1).getBadgeController().getBadge('500Members').getActive());
我希望我的解釋足夠好。我很難解釋它。對不起。
你爲什麼不測試它?也就是說,你可能會預優化,並打開一大堆蠕蟲:你現在必須處理緩存中的過時數據,併發訪問非線程安全的可變數據結構等。只需使用數據庫,速度很快。 –
我想知道它是否始終有效。解釋起來很複雜,測試也很複雜。它比這更深入。 –
是的,它始終有效。沒有數據結構會永遠製作你的對象的副本。他們只是存儲引用。 –