当前位置:  首页>> 技术小册>> Java语言基础10-Java中的集合

  • HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合的时候都使用这个实现类。
  • HashSet 按照 Hash 算法来存储集合中的元素,因此具有很好的存取、查找、删除性能。
  • HashSet 的底层实现原理是哈希表,在内部使用的是 HashMap 来实现的。
  • HashSet 具有以下的特点:
    • ① 不能保证元素的顺序(元素存储顺序和取出顺序不一定相同)。
    • ② HashSet 不是线程安全的。
    • ③ 集合元素可以为 null 。
  • HashSet集合判断两个元素相等的标准 :两个对象的 hashCode() 方法比较相等,并且两个对象的 equals() 方法返回值也相等。

  • 示例:

  1. package com.github.set.demo2;
  2. import java.util.Objects;
  3. /**
  4. * @author maxiaoke.com
  5. * @version 1.0
  6. */
  7. public class Person {
  8. /**
  9. * 姓名
  10. */
  11. private String name;
  12. /**
  13. * 年龄
  14. */
  15. private Integer age;
  16. public Person() {}
  17. public Person(String name, Integer age) {
  18. this.name = name;
  19. this.age = age;
  20. }
  21. public String getName() {
  22. return this.name;
  23. }
  24. public void setName(String name) {
  25. this.name = name;
  26. }
  27. public Integer getAge() {
  28. return this.age;
  29. }
  30. public void setAge(Integer age) {
  31. this.age = age;
  32. }
  33. @Override
  34. public boolean equals(Object o) {
  35. if (this == o) {
  36. return true;
  37. }
  38. if (o == null || this.getClass() != o.getClass()) {
  39. return false;
  40. }
  41. Person person = (Person)o;
  42. return Objects.equals(this.name, person.name) && Objects.equals(this.age, person.age);
  43. }
  44. @Override
  45. public int hashCode() {
  46. return Objects.hash(this.name, this.age);
  47. }
  48. @Override
  49. public String toString() {
  50. return "Person{" + "name='" + this.name + '\'' + ", age=" + this.age + '}';
  51. }
  52. }

示例:

  1. package com.github.set.demo2;
  2. import java.util.HashSet;
  3. import java.util.Set;
  4. /**
  5. * @author maxiaoke.com
  6. * @version 1.0
  7. */
  8. public class Test {
  9. public static void main(String[] args) {
  10. Set<Person> set = new HashSet<>();
  11. set.add(new Person("张三", 18));
  12. set.add(new Person("张三", 18));
  13. set.add(new Person("张三", 21));
  14. set.add(new Person("李四", 20));
  15. set.add(new Person("李四", 18));
  16. System.out.println("set = " + set); // set = [Person{name='张三', age=21}, Person{name='张三', age=18}, Person{name='李四', age=20}, Person{name='李四', age=18}]
  17. }
  18. }

该分类下的相关小册推荐: