如何在java Set中存储唯一对象以避免重复?

mccptt67  于 2024-01-05  发布在  Java
关注(0)|答案(4)|浏览(187)

如何在java Set中存储唯一对象以避免重复?
例如
考虑Employee对象(Employee Id,name,salary....)
需要添加到Set中的对象的雇员列表。我们需要限制Set中需要通过“雇员ID”标识的重复元素。
最好的办法是什么?

5n0oy7gb

5n0oy7gb1#

如果你正在使用java.util.Set的实现,只要你的equalshashCode方法被正确实现,它就不应该允许重复。不知道为什么你的问题上有hashmap和hashtable作为标签。也许你应该重新措辞你的问题,并添加给你问题的代码?
编辑:考虑您的编辑:
如果你使用Set,你的员工应该有以下方法:

  1. @Override
  2. public int hashCode() {
  3. final int prime = 31;
  4. int result = 1;
  5. result = prime * result + ((id == null) ? 0 : id.hashCode());
  6. return result;
  7. }
  8. @Override
  9. public boolean equals(Object obj) {
  10. if (this == obj)
  11. return true;
  12. if (obj == null)
  13. return false;
  14. if (getClass() != obj.getClass())
  15. return false;
  16. Employee other = (Employee) obj;
  17. if (id == null) {
  18. if (other.id != null)
  19. return false;
  20. } else if (!id.equals(other.id))
  21. return false;
  22. return true;
  23. }

字符串

展开查看全部
qmb5sa22

qmb5sa222#

与@Dirk类似,您也可以使用org. apache. commons中的HashCodeBuilder和HashsBuilder。
它看起来像这样:

  1. @Override
  2. public int hashCode() {
  3. return new HashCodeBuilder()
  4. .append(id)
  5. .append(name)
  6. .append(salary)
  7. .toHashCode();
  8. }
  9. @Override
  10. public boolean equals(Object obj) {
  11. if (obj instanceof Employee) {
  12. final Employee employee = (Employee) obj;
  13. return new EqualsBuilder()
  14. .append(id, employee.id)
  15. .append(name, employee.name)
  16. .append(salary, employee.salary)
  17. .isEquals();
  18. } else {
  19. return false;
  20. }
  21. }

字符串

展开查看全部
mrphzbgm

mrphzbgm3#

“要在Set中存储唯一的用户定义对象,您必须显式地删除hashCodeequals方法以学生详细信息为例”

  1. @Override
  2. public int hashCode(){
  3. return this.id;
  4. }
  5. @Override
  6. public boolean equals(Object obj)
  7. {
  8. return this.hashCode==((Student)obj).hashCode();
  9. }

字符串

pieyvz9o

pieyvz9o4#

设置仅存储唯一对象
例如:

  1. Set set = new HashSet();
  2. // Add elements to the set
  3. set.add("a");//true
  4. set.add("b");//true
  5. set.add("c");//true
  6. set.add("d");//true
  7. set.add("a");//false

字符串
add将返回false,当你试图存储已经在Set中的对象

相关问题