HashSet类

集合的体系:
 --------------| Collection 单列集合的根接口
 ---------------------| List 如果实现了List接口的集合类, 具备的特点:有序,可重复。
 -----------------------------|ArrayList 底层是维护了一个Object[]数组实现的,特点:查询速度快,增删慢
 什么时候使用ArrayList:如果目前的数据是查询比较多,增删比较少的时候,那么就使用ArrayList存储这批数据。比如:高校的图书馆。  
 -----------------------------|LinkedList 底层是使用了链表数据结构实现的。
 -----------------------------|Vector(了解即可) 底层也是维护了一个Object数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。
 ---------------------| Set 如果实现了Set接口的集合类, 具备的特点:无序,不可重复。
 -----------------------------|HashSet 
 -----------------------------|TreeSet 
 无序:添加元素的顺序与元素出来的顺序是不一致的。
 
 hashSet的实现原理:
     往hashSet添加元素的时候,HashSet会先调用元素的hashCode()方法得到元素的哈希值,
     然后通过元素的哈希值经过移位等运算,就可以算出该元素在哈希表中的存储位置。
 
 情况1:如果算出元素存储的位置目前没有任何元素存储,那么该元素可以直接存储到该位置上。
 
 情况2:如果算出该元素的存储位置目前已经存在有其他的元素了,那么会调用该元素的equals()方法与该位置的元素再比较一次,
         如果equals()返回的是true,那么该元素与这个位置上的元素就视为重复元素,不允许添加,如果equals()方法返回的是false,
         那么该元素添加。
  
  
  1. package com.cn.set;
  2. import java.util.HashSet;
  3. import java.util.Set;
  4. /**
  5. * Author:Liu Zhiyong
  6. * Version:Version_1
  7. * Date:2016年7月16日09:37:06
  8. * Desc:
  9. * 集合的体系:
  10. * --------------| Collection 单列集合的根接口
  11. * ---------------------| List 如果实现了List接口的集合类, 具备的特点:有序,可重复。
  12. * -----------------------------|ArrayList 底层是维护了一个Object[]数组实现的,特点:查询速度快,增删慢
  13. * 什么时候使用ArrayList:如果目前的数据是查询比较多,增删比较少的时候,那么就使用ArrayList存储这批数据。比如:高校的图书馆。
  14. * -----------------------------|LinkedList 底层是使用了链表数据结构实现的。
  15. * -----------------------------|Vector(了解即可) 底层也是维护了一个Object数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。
  16. * ---------------------| Set 如果实现了Set接口的集合类, 具备的特点:无序,不可重复。
  17. * -----------------------------|HashSet
  18. * -----------------------------|TreeSet
  19. * 无序:添加元素的顺序与元素出来的顺序是不一致的。
  20. *
  21. * hashSet的实现原理:
  22. * 往hashSet添加元素的时候,HashSet会先调用元素的hashCode()方法得到元素的哈希值,
  23. * 然后通过元素的哈希值经过移位等运算,就可以算出该元素在哈希表中的存储位置。
  24. *
  25. * 情况1:如果算出元素存储的位置目前没有任何元素存储,那么该元素可以直接存储到该位置上。
  26. *
  27. * 情况2:如果算出该元素的存储位置目前已经存在有其他的元素了,那么会调用该元素的equals()方法与该位置的元素再比较一次,
  28. * 如果equals()返回的是true,那么该元素与这个位置上的元素就视为重复元素,不允许添加,如果equals()方法返回的是false,
  29. * 那么该元素添加。
  30. */
  31. class Person{
  32. int id;
  33. String name;
  34. public Person(int id, String name) {
  35. this.id = id;
  36. this.name = name;
  37. }
  38. @Override
  39. public String toString() {
  40. return "{" + this.id + this.name + "}";
  41. }
  42. @Override
  43. public int hashCode() {
  44. System.out.println("==========hashCode()调用了==============");
  45. return this.id;
  46. }
  47. @Override
  48. public boolean equals(Object obj) {
  49. // TODO Auto-generated method stub
  50. System.out.println("==========equals()调用了==============");
  51. Person p = (Person)obj;
  52. return this.id == p.id;
  53. }
  54. }
  55. public class Demo1 {
  56. public static void main(String[] args) {
  57. HashSet set = new HashSet();
  58. /* set.add("木先森");
  59. set.add("木丁西");
  60. set.add("刘先生");
  61. System.out.println("添加成功了吗?" + set.add("刘先森"));//true
  62. System.out.println("添加成功了吗?" + set.add("刘先森"));//false 这个不会被添加进去。
  63. System.out.println(set); */
  64. set.add(new Person(110, "刘先森"));
  65. set.add(new Person(120, "木先森"));
  66. set.add(new Person(119, "木丁西"));
  67. set.add(new Person(110, "刘sir"));
  68. //在现实生活中只要编号一致就为同一个人。
  69. set.add(new Person(110, "鸭蛋"));
  70. System.out.println(set);
  71. }
  72. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值