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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

肥皂起泡泡 2023-06-04 19:44:31
我有一個(gè) ArrayList ,其中包含每 n 秒更新一次并具有現(xiàn)有數(shù)據(jù)總量的data類型的對(duì)象。Person為了在表格中顯示此數(shù)據(jù),我使用了clear()ObservableList 并用于addAll(data)避免 GUI 故障。我想將 HashSet 用作 Observable Collection,我想知道是否有一種有效的方法可以從 HashSet 更新對(duì)象(如果它只是部分相等)。代碼: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); 該位置的索引應(yīng)刪除 Max 并添加新的 Max 50 次訪問(可能在同一位置)或更好地將變量訪問更改為 50。如果所有數(shù)據(jù)都相同(使用 equals() 和 hashCode() 檢查):不應(yīng)添加或刪除任何內(nèi)容如果 new Person (with new id) 不在 HashSet 中,則應(yīng)該添加它這是如何實(shí)現(xiàn)的?我嘗試使用 2 個(gè) for 循環(huán)(這很耗時(shí))并覆蓋哈希集,但我不確定該方法。
查看完整描述

2 回答

?
撒科打諢

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊

使用一個(gè)Map,而不是一個(gè)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你想按輸入順序排序,你可以使用。


查看完整回答
反對(duì) 回復(fù) 2023-06-04
?
翻過高山走不出你

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊

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



查看完整回答
反對(duì) 回復(fù) 2023-06-04
  • 2 回答
  • 0 關(guān)注
  • 175 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)