美文网首页
集合---set接口

集合---set接口

作者: 李霖神谷 | 来源:发表于2017-02-12 16:11 被阅读9次

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的方法。保证了存储有序,并且对象唯一。

相关文章

  • 10 Java集合 - Set集合

    10.1 Set集合 Set接口继承Collection接口,没有提供额外的方法。Set集合不允许包含相同...

  • 9.2接口下的继承者

    collection是集合类的基本接口(set,list)也是list和set的父接口,set接口set接口集成子...

  • 集合

    java集合接口有List,Set,Map。 List和Set都实现了Collection(对集合排序,遍历)接口...

  • 常见的集合有哪些?

    所有集合的顶级接口:Collection和Map。 Collection接口包括:List接口和Set接口。set...

  • Set集合API方法实例演示

    Set Set集合接口也继承了Collection集合接口,此集合的元素是无序的,且不允重复。元素默认为正序排序 ...

  • Set集合

    2.1、Set集合 Set词义:数学中集合的概念。也是Collection的子接口。 Set作为Collectio...

  • java.day10

    集合的内容 集合框架 接口 实现 算法 collection 是所有集合接口的根接口,通用的集合操作 set 是不...

  • Java基础方法10(集合)

    1.Set集合 2.List集合 3.Collection接口 Comparator接口与Comparable接口...

  • JAVA集合------萌新学习之路,SET接口

    Set接口 Set集合不允许有重复元素,判断两个Set集合元素是否相等使用equals比较,而不是==,set集合...

  • 常用的List,Set,Map容器以及比较器

    一、简述: List,Set接口属于集合类容器,Collection接口是它们所有的父接口;与List,Set接口...

网友评论

      本文标题:集合---set接口

      本文链接:https://www.haomeiwen.com/subject/jeraittx.html