本文共 1385 字,大约阅读时间需要 4 分钟。
Set接口用于存储无序的,不可重复的数据。其核心特性是无序性和不可重复性。与Collection接口不同,Set接口没有定义新的方法,所有操作都基于Collection中的方法实现。
任何类如果想实现Set接口,必须重写以下两个方法:
hashCode():确保相等的对象具有相同的散列码。equals():判断两个对象是否相等时,遵循以下规则: 这些方法的设计必须保持一致性,避免因散列码不一致导致的逻辑错误。
HashSet的底层采用哈希表( HashMap)来存储数据。其初始容量为16,当存储数据量达到75%时,容量会自动扩大为原来的2倍(如16→32→64→128...)。
// HashSet的构造方法 public HashSet(Collection c) { this.map = new HashMap<>(Math.max((int) (c.size() / 0.75) + 1, 16)); this.addAll(c); } HashSet支持集合中常见的操作,如添加、删除、判断存在、清空和迭代等。以下是示例代码:
HashSethashSet = new HashSet<>(); hashSet.add("lwh"); hashSet.add("slw"); hashSet.remove("lwh"); System.out.println("包含 'lwh' 吗?" + hashSet.contains("lwh")); System.out.println("集合大小为:" + hashSet.size()); System.out.println("集合是否为空?" + hashSet.isEmpty()); Iterator iterator = hashSet.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); }
当尝试向HashSet中添加一个元素时,系统会执行以下步骤:
hashCode()方法,计算其哈希值。equals()方法: 这种机制保证了HashSet的高效性和唯一性。
HashSet作为Set接口的重要实现类,具有以下特点:
equals()方法判断时,若返回true,则该元素已存在,添加失败。HashSet的底层采用哈希表存储,能够在O(1)时间复杂度内完成查找、添加和删除操作,适合用于需要快速数据存取和操作的场景。
转载地址:http://vdhfk.baihongyu.com/