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); } }
标签:Set,HashSet,System,hashCode,println,set1,哈希,集合,out From: https://www.cnblogs.com/Lucky-only/p/16975212.html