第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何合并到具有部分相等對象的哈希集?

如何合并到具有部分相等對象的哈希集?

肥皂起泡泡 2023-06-04 19:44:31
我有一個 ArrayList ,其中包含每 n 秒更新一次并具有現(xiàn)有數(shù)據(jù)總量的data類型的對象。Person為了在表格中顯示此數(shù)據(jù),我使用了clear()ObservableList 并用于addAll(data)避免 GUI 故障。我想將 HashSet 用作 Observable Collection,我想知道是否有一種有效的方法可以從 HashSet 更新對象(如果它只是部分相等)。代碼:class Person {   int id;   String name;   int visits;  //this value can be different   @Override   int hashCode() {   //...   }   @Override   boolean equals() {   //...   }}class Main {   static void main(String[] args) {      List<Person> data = new ArrayList<>();      data.add(new Person(1, Max, 4);      data.add(new Person(2, Richard, 7);       data.add(new Person(3, Tom, 4);       Set<Person> set = new HashSet<>();      set.addAll(data);      // new Data incoming      // could be the same Person (all 3 variables same)      // could be existing Person but with changed variables (id stays the same)      // could be completely new Person (new id)   }}期望的輸出:如果新數(shù)據(jù)添加了現(xiàn)有的 Person 但變量不同,則 new Person(1, Max, 50); 該位置的索引應刪除 Max 并添加新的 Max 50 次訪問(可能在同一位置)或更好地將變量訪問更改為 50。如果所有數(shù)據(jù)都相同(使用 equals() 和 hashCode() 檢查):不應添加或刪除任何內容如果 new Person (with new id) 不在 HashSet 中,則應該添加它這是如何實現(xiàn)的?我嘗試使用 2 個 for 循環(huán)(這很耗時)并覆蓋哈希集,但我不確定該方法。
查看完整描述

2 回答

?
撒科打諢

TA貢獻1934條經(jīng)驗 獲得超2個贊

使用一個Map,而不是一個Set。


  List<Person> data = new ArrayList<>();

  data.add(new Person(1, Max, 4);

  data.add(new Person(2, Richard, 7); 

  data.add(new Person(3, Tom, 4); 


  Map<Integer, Person> map = new HashMap<>();

  data.forEach(person -> map.put(person.getId(), person));


  // new Data incoming

  // could be the same Person (all 3 variables same)

  // could be existing Person but with changed variables (id stays the same)

  // could be completely new Person (new id)

  Person newPerson = ...;

  map.put(newPerson.getId(), newPerson);

TreeMap如果你想按 ID 排序,或者LinkedHashMap你想按輸入順序排序,你可以使用。


查看完整回答
反對 回復 2023-06-04
?
翻過高山走不出你

TA貢獻1875條經(jīng)驗 獲得超3個贊

不存在部分相等的情況。您的方法equals()返回truefalse。在您的情況下,您所說的平等僅由人的身份決定。也就是說,如果您添加一個具有相同 id 的人,其他任何事情都不重要,即使visits值不同,這兩個 Person 實例也會被判斷為相等。因此,如果您將 Person 實例存儲在集合中并添加一個 id 為 1 的 Person - 如果該集合已經(jīng)包含一個 id 為 1 的 Person,則舊的將被新的替換。還要記住Set沒有順序。如果您想保留訂單,請使用SortedSetList。但是如果你使用List你將不得不編寫代碼來確保你自己不允許重復



查看完整回答
反對 回復 2023-06-04
  • 2 回答
  • 0 關注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號