java学习16-Set-HashSet TreeSet的理解

1.Set
     特点:无序(存储顺序和取出顺序不一致),唯一
2.HashSet集合
  a.底层数据结构为哈希表(一个元素为链表的数组)
  b. 哈希表底层依赖两个方法:hashcode和equals
     执行顺序:首先比较哈希值是否相同
                      相同:继续执行equals方法
                            返回true  元素重复,就不添加
                            返回false:   直接把元素添加到集合中
                     不同:就直接把元素添加到集合中
   c.保证元素的唯一性
          由hashcode 和equals  方法保证
    d.hashSet存储字符串并遍历   由于String对象自动重写了hashcode和equals方法  所以保证了字符串的唯一性
   e.hashSet存储自定义对象并遍历,(自定义对象的成员相同视为同一个元素)由于自定义对象中需要自动重写hashcode和equals方法,才能保证对象的唯一性
     比如  
package cn.itcast_02;
/**
 * @author Administrator
 *
 */
public class Student {
 private String name;
 private int age;
 public Student() {
  super();
 }
 public Student(String name, int age) {
  super();
  this.name = name;
  this.age = age;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 @Override
 public int hashCode() {
  final int prime = 31;
  int result = 1;
  result = prime * result + age;
  result = prime * result + ((name == null) ? 0 : name.hashCode());
  return result;
 }
 @Override
 public boolean equals(Object obj) {
  if (this == obj)
   return true;
  if (obj == null)
   return false;
  if (getClass() != obj.getClass())
   return false;
  Student other = (Student) obj;
  if (age != other.age)
   return false;
  if (name == null) {
   if (other.name != null)
    return false;
  } else if (!name.equals(other.name))
   return false;
  return true;
 }
}
 e.hashSet方法       
 
 booleanadd(E e)
          如果此 set 中尚未包含指定元素,则添加指定元素。
 voidclear()
          从此 set 中移除所有元素。
 Objectclone()
          返回此 HashSet 实例的浅表副本:并没有复制这些元素本身。
 booleancontains(Object o)
          如果此 set 包含指定元素,则返回 true
 booleanisEmpty()
          如果此 set 不包含任何元素,则返回 true
 Iterator<E>iterator()
          返回对此 set 中元素进行迭代的迭代器。
 booleanremove(Object o)
          如果指定元素存在于此 set 中,则将其移除。
 intsize()
          返回此 set 中的元素的数量(set 的容量)。
3.TreeSet集合
    a.底层数据结构是个红黑树(自平衡二叉树)
   b:保证元素的排序方式
        注意:实现自定义类的方法必须重写CompareTo方法
       自然排序(元素具备比较性)
          让元素所属的类实现Comparable接口

    比较器排序(集合具备比较性)
         让集合构造方法接收Comparator的实现类对象
4.Collection集合的总结
  Collection
  |--List 有序,可重复
   |--ArrayList
    底层数据结构是数组,查询快,增删慢。
    线程不安全,效率高
   |--Vector
    底层数据结构是数组,查询快,增删慢。
    线程安全,效率低
   |--LinkedList
    底层数据结构是链表,查询慢,增删快。
    线程不安全,效率高
  |--Set 无序,唯一
   |--HashSet
    底层数据结构是哈希表。
    如何保证元素唯一性的呢?
     依赖两个方法:hashCode()和equals()
     开发中自动生成这两个方法即可
    |--LinkedHashSet
     底层数据结构是链表和哈希表
     由链表保证元素有序
     由哈希表保证元素唯一
   |--TreeSet
    底层数据结构是红黑树。
    如何保证元素排序的呢?
     自然排序
     比较器排序
    如何保证元素唯一性的呢?
     根据比较的返回值是否是0来决定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值