• HashSet


    1.Set集合:特点:1.没有下标,不能存重复值,怎么进的不一定怎么出;因为没有下标只能通过增强for和迭代器进行取值,
    普通的数组不能用迭代器取值,因为没迭代器对象所以不能调迭代器方法;因为set的集合是怎么进的不一定怎么出,所以取值时顺序肯定不一样
    2.HashSet是数组和链表结合的结构;默认的数组长度是16; 加载因子:就是在达到加载因子的数值时会提前开辟一个新的长度为16的数组
    数组存的是地址,桶里存的是元素
    3.public static void main(String[] args){
    int s1="abc".hashcode();//计算哈希值的方法 .hashcode()
    int s2="abc".hashcode();当我们向HashSet存值的时候,add方法会先去调用存储类型的类中的Hashcode方法计算该元素的哈希值;
    int s3="bcd".hashcode();计算完元素的哈希值会到数组中查找有没有有该元素一样的哈希值,如果没有就直接将该元素存入集合中
    System.out.println(s1);//数组里面存哈希值,链表存元素值,数组里面的哈希值可以看做就是地址
    System.out.println(s2);
    System.out.println(s3);
    //1.计算元素哈希值;2.到容器中找是否有改元素的哈希值;如果哈希值相同则调用该元素的equals()方法比较俩元素内容是否一样
    //如果equals()方法比较后内容不一样(哈希值一样,内容不一样)就会存进去(挂在已存元素的链表下面),如果哈希值一样内容也一样则不存
    Set<Person> set=new HashSet<Person>();
    set.add(new Person("a",10));//因为没有重写equals()方法和hashcode()方法所以没法比较出来
    set.add(new Person("b",9));//不重写hashcode()方法会根据地址来比较;也就是继承父类的hashcode()是比较地址
    set.add(new Person("c",8)); //如果Set或者HashCode存自定义元素需要重写hashcode和equals方法才行
    //给HashSet中存放自定义类型元素时,需要重写对象中的hashCode和equals方法,建立自己的比较方式,才能保证HashSet集合中的对象唯一
    //遍历
    for(Person p:set){
    System.out.println(p);
    }
    5.public static void main(String[] args) {//唯一不一样;怎么存就怎么取;(没有下标,不能存重复元素,怎么存怎么取)
    LinkedHashSet<String> set=new LinkedHashSet<String>();
    set.add("abc");//add调用了.hashcode()和.equals()方法
    set.add("bcd");
    //遍历
    for(String s:set){
    System.out.println(s);
    }
    }

  • 相关阅读:
    高速排序
    Android 中实现分享和第三方登陆---以新浪微博为例
    linux下用mail发送邮件
    hello.c内核模块编译 -- linux内核
    最小生成树
    JDBC连接Oracle数据库
    解决方案:zabbix(WEB界面的提供分布式系统监视以及网络监视功能)
    Grunt:grunt-tmod
    打包器:Webpack
    模板:art-template-loader
  • 原文地址:https://www.cnblogs.com/hankai2735/p/11331864.html
Copyright © 2020-2023  润新知