集合框架(set)

Java集合框架之Set遍历与HashSet与TreeSet比较
本文介绍了Java中Set集合的特点,包括无序性和元素唯一性。详细展示了两种遍历Set集合的方式:foreach循环和迭代器。以HashSet和TreeSet为例,演示了如何使用它们。TreeSet在添加元素时可以依据比较器进行排序。通过示例代码,解释了如何自定义比较器以实现特定排序逻辑。

Set集合的特点:

目录

Set集合的特点:

Set集合的两种遍历方式:

1,foreach

2,迭代器

常用实现类(HashSet)

比较器(hashCode)


1,无序

2,元素不能重复

Set集合的两种遍历方式:

1,foreach

//1.foreach
	for (Object object : set) {
		System.out.println(object);
	}

2,迭代器

Iterator iterator = set.iterator();
		
		while(iterator.hasNext()) {
			Object next = iterator.next();
			System.out.println(next);
		}

常用实现类(HashSet)

    public static void main(String[] args) {
		Set<String> set = new TreeSet<String>();
		//根据某种规则对里面的元素进行排序
		
		set.add("李江");
		set.add("罗骁");
		set.add("f");
		set.add("b");
		set.add("d");
		
		for (String string : set) {
			System.out.println(string);
		}
		

效果图

比较器(hashCode)

    public static void main(String[] args) {
		Set<User> set = new TreeSet<User>(new NameComeparator());
		//根据某种规则对里面的元素进行排序
		
		set.add(new User(1,"a","女"));
		set.add(new User(3,"z","不详"));
		set.add(new User(2,"f","妖"));
		set.add(new User(3,"a","女"));
		
		for (User user : set) {
			System.out.println(user);
		}
	}

效果图

### Java集合框架中的Set接口 #### Set接口概述 `Set` 接口是Java集合框架的一部分,继承自 `Collection` 接口。该接口表示不包含重复元素的集合。更具体地说,`Set` 中不允许存在两个相同的对象,即对于任何一对元素 e1 和 e2,在 `Set` 集合中都满足 !(e1.equals(e2))[^1]。 #### 主要特性 - **唯一性**:`Set` 的核心特征在于其成员的独特性;同一对象仅能出现一次。 - **无序性**:大多数情况下,`Set` 不保证元素顺序(某些实现除外),这意味着遍历时元素可能不会按照插入顺序返回[^2]。 #### 常见实现类 常见的 `Set` 实现有: - `HashSet`: 提供常数时间复杂度 O(1) 的基本操作(add, remove, contains),基于哈希表实现,不维护插入顺序。 - `LinkedHashSet`: 继承于 `HashSet` 并保持元素插入时的顺序,同样支持快速访问性能的同时维持了迭代顺序。 - `TreeSet`: 能够自动排序元素,并允许客户端指定排序标准,底层由红黑树结构支撑,因此增删查改的时间复杂度均为O(log n)。 #### 使用示例 下面是一个简单的例子来展示如何创建并操作 `Set`: ```java import java.util.*; public class SetExample { public static void main(String[] args){ // 创建 HashSet 实例 Set<String> hashSet = new HashSet<>(); // 添加元素到 set 中 hashSet.add("Apple"); hashSet.add("Banana"); hashSet.add("Orange"); System.out.println("Elements of HashSet: " + hashSet); // 尝试添加已存在的元素 boolean added = hashSet.add("Apple"); // 返回 false 表明未成功加入新元素 if (!added){ System.out.println("'Apple' already exists in the set."); } // 迭代打印所有元素 (注意这里输出顺序不确定) Iterator<String> iterator = hashSet.iterator(); while(iterator.hasNext()){ String element = iterator.next(); System.out.println(element); } } } ``` 上述代码展示了 `HashSet` 的基础用法,包括初始化、添加元素以及尝试向其中添加已有项的操作结果说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值