Set接口-HashSet
介绍存储机制:
Set: 集,无序保存,数据不能重复;具体的实现类HashSet

常用方法:
1 import java.util.ArrayList; 2 import java.util.HashSet; 3 4 public class DemoClass4HashSet { 5 public static void main(String[] args) { 6 //TODO Set接口,实现类:HashSet 7 /* 8 * 9 * */ 10 11 /* HashSet hashSet = new HashSet(); 12 hashSet.add("zhagnsan"); 13 hashSet.add("zhagnsan"); 14 hashSet.add("lisi"); 15 hashSet.add("wangwu"); 16 17 System.out.println(hashSet); //结果还是:[lisi, zhagnsan, wangwu]*/ 18 19 HashSet hashSet = new HashSet(); 20 hashSet.add("zhagnsan"); 21 hashSet.add("lisi"); 22 hashSet.add("wangwu"); 23 //System.out.println(hashSet); //[lisi, zhagnsan, wangwu] 24 25 /* 26 * 1. 增删改查 27 * */ 28 /*//TODO 修改数据,不能修改,因为通过哈希函数计算的内存位置不确定,如果真的要修改,只能“先删除,在新增” 29 30 //TODO “先删除,在新增”来实现修改数据 31 hashSet.remove("lisi"); 32 System.out.println(hashSet); //[zhagnsan, wangwu] 33 34 //查询,不能通过索引来查询,真的要查询,只能通过遍历方法 35 System.out.println("--------------"); 36 for (Object o : hashSet) { 37 System.out.print(o+","); //zhagnsan,wangwu, 38 }*/ 39 40 /* 41 * 2.常用方法 42 * */ 43 HashSet hashSet1 = new HashSet(); 44 ArrayList arrayList = new ArrayList(); 45 arrayList.add("zhangsan"); 46 arrayList.add("wangwu"); 47 arrayList.add("lisi"); 48 49 hashSet1.addAll(arrayList); 50 System.out.println(hashSet1); //[lisi, zhangsan, wangwu] 51 52 Object[] array = hashSet.toArray(); 53 System.out.println(hashSet1.isEmpty()); //false 54 //hashSet1.clear(); 55 System.out.println(hashSet1.contains("lisi")); //true 56 System.out.println(hashSet1.size()); //3 57 Object clone = hashSet1.clone(); 58 System.out.println(clone); //[zhangsan, lisi, wangwu] 59 } 60 }
重复数据:
1 import java.util.HashSet; 2 3 public class DemoClass4HashSetData { 4 public static void main(String[] args) { 5 //TODO HashSet 6 //底层存储结构:数组+链表 7 8 HashSet hashSet = new HashSet(); 9 10 User16 u1 = new User16(); 11 u1.id = 100; 12 u1.name = "zhangsan"; 13 hashSet.add(u1); 14 //获取对象的哈希函数,相当于内存地址了 15 System.out.println("u1的哈希值:"+u1.hashCode()); //1694819250 16 //2. 通过重写方法,来自定义实现hashCode相等 100 17 User16 u2 = new User16(); 18 u2.id = 100; 19 u2.name = "zhangsan"; 20 hashSet.add(u2); 21 System.out.println("u2的哈希值:"+u2.hashCode()); //1365202186 22 //2. 通过重写方法,来自定义实现hashCode相等 100 23 24 User16 u3 = new User16(); 25 u3.id = 101; 26 u3.name = "lisi"; 27 hashSet.add(u3); 28 29 System.out.println(hashSet); //[[101 lisi], [100 zhangsan], [100 zhangsan]] 虽然u1 和 u2 属性值一样, 30 // 但是HashSet保存的是对象的内存地址,索引经过哈西函数计算,值是不一样的 31 32 //2. 通过重写方法,来自定义实现hashCode相等 33 System.out.println(hashSet); //[[100 zhangsan], [101 lisi]] 34 } 35 } 36 37 class User16{ 38 public int id; 39 public String name; 40 41 @Override 42 public String toString() { 43 return "["+id + "\t" + name+"]"; 44 } 45 46 //2. 通过重写方法,来自定义实现hashCode相等 47 @Override 48 public int hashCode() { 49 //return super.hashCode(); 50 return id; 51 } 52 53 @Override 54 public boolean equals(Object obj) { 55 //return super.equals(obj); 56 if(obj instanceof User16){ 57 User16 u = (User16)obj; 58 if(u.id == id){ 59 if(u.name.equals(name)){ 60 return true; 61 } 62 } 63 } 64 return false; 65 } 66 }

浙公网安备 33010602011771号