Java Set.add(E e)
若加入的元素已經存在,則新的元素不會取代原本的。
例如Item
為Set
要的元素類別。注意覆寫的hashCode()
及equals()
僅根據id
來比較。
Item
package com.abc.demo;
import java.util.Objects;
public class Item {
private long id;
private int value;
public Item(long id, int value) {
this.id = id;
this.value = value;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Item item = (Item) o;
return id == item.id;
}
@Override
public int hashCode() {
return Objects.hash(id);
}
@Override
public String toString() {
return "Item{id=" + id +", value=" + value + "}";
}
}
依序加入兩個id
相同但value
值不同的Item
物件,可以看到後面加入的元素並沒有覆蓋前面的元素。
package com.abc.demo;
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set<Item> set = new HashSet<>();
set.add(new Item(1, 100));
boolean update = set.add(new Item(1, 200));
System.out.println(update); // false
set.forEach(System.out::println); // Item{id=1, value=100}
}
}
節錄Set.add(E e)
API說明如下。
...If this set already contains the element, the call leaves the set unchanged and returns false.
沒有留言:
張貼留言