集合之Set【HashSet】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | package com.Lucky; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.function.Consumer; /** * Set集合: 无序/不可重复/没有索引 * * HashSet: * 底层采用【哈希表】存储结构 * JDK8之前:哈希表由数组+链表组成 * JDK8之后:哈希表由数组+链表+红黑树组成 * */ /** * 哈希值: * 1.对象的整数形式 * 没有重写hashCode方法,不同对象计算的哈希值也是不同的 * 重写了hashCode方法,但是不同对象的属性值相同,计算出来的哈希值也是一样的 * 注意点:哈希碰撞 */ public class HashSetDemo { public static void main(String[] args) { //创建Set集合 Set<String> set1= new HashSet<>(); set1.add( "唯易人生" ); //返回的结果是booleam类型 set1.add( "YYDS" ); set1.add( "什么鬼???" ); set1.add( "什么鬼???" ); //false 重复的数据无法添加 //遍历获取数据 /* 1.迭代器遍历 */ System.out.println( "-------- 1.迭代器遍历--------------" ); Iterator<String> it = set1.iterator(); while (it.hasNext()){ System.out.println(it.next()); } /* 2.增强for循环遍历 */ System.out.println( "---------2.增强for循环遍历---------------" ); for (String s : set1) { System.out.println(s); } /* 3.lamda表达式遍历 */ System.out.println( "---------3.lamda表达式遍历---------------" ); //匿名内部类重写 set1.forEach( new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } }); //lamda表达式 set1.forEach(str->System.out.println(str)); ////////////////////////////////////////////////////////////////// System.out.println( "****************** hashSet ************************" ); //创建TestDemo对象 TestDemo Demo1= new TestDemo( "唯易人生" , 22 ); TestDemo Demo2= new TestDemo( "唯易人生" , 22 ); //此时已经重写了hashCode方法 System.out.println(Demo1.hashCode()); //计算出来的哈希值一样 System.out.println(Demo2.hashCode()); //特殊情况【哈希碰撞】 System.out.println( "---------【哈希碰撞】-----------" ); System.out.println( "abc" .hashCode()); System.out.println( "acD" .hashCode()); int index=( 10 - 1 ) & 80 ; System.out.println(index); } } |
底层数据结构分析:
链表结构:
红黑树结构:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律