Set集合详解

Set集合

set集合的概述
  • set集合不可以存放重复元素,元素的存取是无序的。
如何选择Set集合及其子类
  • set -->不保留存储顺序并且去掉重复元素
  • TreeSet -->适用于元素排序
  • HashSet -->如果不需要排序请选我,比TreeSet效率高
  • LinkedHashSet -->如果需要保留存储顺序,又要过滤重复元素选择我。

HashSet

1.HashSet的概述
  • 此类实现了set接口,由哈希表支持,它不保证set的迭代顺序,此类允许使用null元素
2.HashSet的特点
  • 无序的集合,存储和取出的顺序不同,没有索引,不存储重复的数据
  • 底层的数据结构是哈希表(链表和数组的结合体)
  • 存储和取出都比较快
  • 线程不安全的

Comparator和Comparable的用法

1.Comparable的概述
  • 该接口强行对实现它的每一个类的对象进行整体排序,Java中称这种排序为自然排序。实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort )进行自动排序。
  • 类的 compareTo方法被称为它的自然比较方法 。
2.Comparable的方法
public int compareTo(T o);
如果x < y, 返回-1;如果x = y, 返回0;如果x > y, 返回1。
### Python 中 `set` 集合的详细介绍及使用方法 #### 1. 创建集合 Python 提供了两种方式来创建集合: - 使用大括号 `{}` 来定义集合,注意空的大括号会创建一个字典而不是集合[^4]。 ```python fruits = {'apple', 'banana', 'orange'} ``` - 使用内置函数 `set()` 将其他可迭代对象(如列表、字符串等)转换成集合。 ```python numbers_list = [1, 2, 3, 4, 5] number_set = set(numbers_list) print(number_set) # 输出 {1, 2, 3, 4, 5} empty_set = set() print(empty_set) # 输出 set() ``` #### 2. 特性说明 集合具有以下几个重要特性: - **唯一性**:不允许存在重复项;如果尝试向已存在的元素再次添加相同的值,则不会有任何效果。 - **无序性**:不像列表那样保持插入顺序,在遍历时可能会有不同的排列形式。 - **不可变成员**:虽然整个集合是可以改变的,但是其内部所含有的每一个元素都应该是不可变得类型,比如整数、浮点数或字符串等基本数据结构。不能包含像列表这样的可变容器作为元素。 #### 3. 基本操作 对于已经建立好的集合来说,支持如下几种常见的运算符和方法来进行各种各样的处理工作: ##### 添加/移除元素 可以通过 `.add(element)` 方法给定一个新的项目加入到当前集中; 也可以利用`.remove(element)` 或者 `.discard(element)` 删除指定条目,区别在于当试图去除不存在于其中的对象时前者抛异常而后者静默失败。 ```python colors = {"red", "green"} colors.add("blue") # 正常情况下增加新颜色 blue 到 colors 当中 print(colors) try: colors.remove('yellow') # 如果黄色不在面则引发 KeyError 错误 except KeyError as e: print(f"{e} not found") colors.discard('purple') # 即使紫色不存在也不会报错 ``` ##### 计算交集、并集与差集 可以分别调用 `.intersection(other_set)` , `.union(another_set)` 和 `.difference(yet_another_set)` 实现上述三种逻辑关系的操作[^3]. ```python a = {1, 2, 3, 4} b = {3, 4, 5, 6} intersected_elements = a.intersection(b) # 获取共同拥有的部分 -> {3, 4} all_unique_elements = a.union(b) # 合并与去重后的结果 -> {1, 2, 3, 4, 5, 6} elements_only_in_a = a.difference(b) # 属于 A 不属于 B 的那些 -> {1, 2} ``` #### 4. 排序问题 由于集合本身不具备有序性质,因此直接对其进行排序是没有意义的。不过可以在将其转化为列表之后再做进一步安排[^2]: ```python unsorted_numbers = {7, 8, 9, 0, 1} sorted_version = sorted(unsorted_numbers) print(sorted_version) # 结果为升序排列的 list 类型 [0, 1, 7, 8, 9] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值