集合---set接口

set集合是collection下的接口,无序不重复。set中的方法与collection中的方法相同。
它的下面也有一些实现类
hashset类:它的底层是一个哈希表,当一个对象要在hashset中存放的时候,会拿这个对象根据算法算出它在数组中的位置。这个算法就是Object中的hashcode方法。
它的底层容量是16,当内存不够是,以0.75倍增长。
给hashset存放对象时应该注意什么问题:
一定要根据对象的特有数据计算哈希值,并且通过equals方法进行比较。所以自定义对象所属的类一定要对hashcode equals toString进行复写。
hashset如何保证自定义对象的唯一:
自定义对象根据对象的特有数据计算哈希值,如果相同再在equals方法中比较如果返回true则两对象有相同地址两对象是同一个,不保存,如果哈希值相同equals返回fals依然保存。

import java.util.HashSet;
import java.util.Iterator;
class People {
    private String name;
    private int age;
    
    public People(String string, int i) {
        // TODO Auto-generated constructor stub
        this.name=string;
        this.age=i;
    }
    
    @Override
    public int hashCode() {
        // TODO Auto-generated method stub
        return age*2;
    }
    
    @Override
    public boolean equals(Object obj) {
        // TODO Auto-generated method stub
        return true;
    }

    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 String toString() {
        return "People [name=" + name + ", age=" + age + "]";
    }
    
}

public class HashsetDemo {
    public static void main(String[] args) {
        
        HashSet h=new HashSet();
        h.add(new People("lishuai",22));
        h.add(new People("lishuai",22));
        h.add(new People("wangwu",20));
        h.add(new People("zhangxi",29));
        h.add(new People("lishuai",22));
        for(Iterator i=h.iterator();i.hasNext();){
            System.out.println(i.next());
        }
    }
    
    @Override
    public String toString() {
        return "JiHeDemo [getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
        + "]";
    }
}

不同的人的年龄不一样,我们通过hashcode复写计算不同的哈希值,不同的哈希值代表不同的对象,如果相同就不保存,这时再通过equals判断它们的地址。
LinkeHashset:它没有自己的方法,都是继承hashset的方法。保证了存储有序,并且对象唯一。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 上一篇文章介绍了Set集合的通用知识。Set集合中包含了三个比较重要的实现类:HashSet、TreeSet和En...
    Ruheng阅读 15,711评论 3 57
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 3,744评论 0 11
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,779评论 18 399
  • Java集合框架 Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操作对象的接口组成。不同接口描述...
    小石38阅读 375评论 0 0
  • Phenomenalism By Tsai Cheng-Yuan Come from life, art shap...
    陈子弘阅读 1,033评论 2 6