网站首页 > 技术文章 正文
Set是Java集合类中的一部分,继承了Collection接口。
特点:Set中的数据不允许重复。
基本操作
1、创建Set实例(以HashSet为例)
// 数据类型不能为基本类型
Set<数据类型> set = new HashSet<>();
// 示例
Set<Integer> set = new HashSet<>();
2、添加一个元素
使用 add 方法。
boolean add(E e);
示例:
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(1);
set.add(2);
set.add(3);
System.out.println(set); // 输出 [1, 2, 3]
3、添加一个集合
使用 addAll 方法。
boolean addAll(Collection<? extends E> c);
示例:
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(1);
set.add(2);
set.add(3);
Set<Integer> set1 = new HashSet<>();
set1.add(1);
set1.add(4);
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(5);
set.addAll(set1);
System.out.println(set); // 输出 [1, 2, 3, 4]
set.addAll(list);
System.out.println(set); // 输出 [1, 2, 3, 4, 5]
4、删除元素
使用 remove 方法。
boolean remove(Object o);
示例:
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(1);
set.add(2);
set.add(3);
set.remove(1);
System.out.println(set); // 输出 [2, 3]
5、获取集合中元素个数
使用 size 方法。
int size();
示例:
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(1);
set.add(2);
set.add(3);
System.out.println(set.size()); // 输出 3
6、判断集合是否为空
使用 isEmpty 方法。
boolean isEmpty();
示例:
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(1);
set.add(2);
set.add(3);
System.out.println(set.isEmpty()); // 输出 false
7、判断集合中是否包含指定的元素
使用 contains 方法。
boolean contains(Object o);
示例:
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(1);
set.add(2);
set.add(3);
System.out.println(set.contains(1));
8、判断集合是否包含另外一个集合
使用 containsAll 方法。
boolean containsAll(Collection<?> c);
示例:
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(1);
set.add(2);
set.add(3);
Set<Integer> set1 = new HashSet<>();
set1.add(1);
set1.add(4);
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(3);
System.out.println(set.containsAll(set1)); // 输出 false
System.out.println(set.containsAll(list)); // 输出 true
9、集合转数组
使用 toArray 方法,有两个方法可以使用,如下:
Object[] toArray();
<T> T[] toArray(T[] a);
示例:
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(1);
set.add(2);
set.add(3);
Object[] objects = set.toArray();
Integer[] integers = set.toArray(new Integer[0]);
10、清空集合元素
使用 clear 方法。
void clear();
示例:
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(1);
set.add(2);
set.add(3);
set.clear();
高级用法
1、集合几种方式
第一种:for循环遍历
for (Integer i : set) {
System.out.println(i);
}
第二种:迭代器遍历
Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
第三种:foreach方式
set.forEach(System.out::println);
第四种:spliterator方式,比较不常用
Spliterator<Integer> spliterator = set.spliterator();
spliterator.forEachRemaining(System.out::println);
2、求交集、差集、并集
首先准备两个集合:
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
Set<Integer> set1 = new HashSet<>();
set1.add(3);
set1.add(4);
set1.add(5);
差集:
set.removeAll(set1);
并集:
set.removeAll(set1);
set.addAll(set1);
交集:
set.retainAll(set1);
3、EnumSet使用
使用EnumSet创建集合,如下:
public class SetDemo {
enum Fruit {APPLE, BANANA, PEAR}
public static void main(String[] args) {
Set<Fruit> fruitSet = EnumSet.of(Fruit.APPLE, Fruit.BANANA, Fruit.PEAR);
// EnumSet其他方法略
}
}
4、TreeSet使用
使用TreeSet进行正向排序:
Set<Integer> set = new TreeSet<>();
set.add(2);
set.add(1);
set.add(3);
System.out.println(set); // 正向排序,输出 [1, 2, 3]
反向排序:
Set<Integer> set = new TreeSet<>(Comparator.reverseOrder());
set.add(2);
set.add(1);
set.add(3);
System.out.println(set); // 反向排序,输出 [3, 2, 1]
还可以自定义排序:
Set<Integer> set = new TreeSet<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
set.add(2);
set.add(1);
set.add(3);
System.out.println(set); // 自定义排序,输出 [1, 2, 3]
猜你喜欢
- 2024-10-08 java常用数据判空、比较和类型转换
- 2024-10-08 集合框架-ArrayList源码分析(java集合框架源码解析)
- 2024-10-08 大数据编程入门:Java ArrayList(java大数据视频教程)
- 2024-10-08 Python开发入门之列表-List(python列表的基本操作编程)
- 2024-10-08 如何在python各种列表中求最值?(如何在python各种列表中求最值的方法)
- 2024-10-08 List接口常用方法(list接口的常用方法)
- 2024-10-08 Python语法基础(6)集合(python中的集合)
- 2024-10-08 Java初学者学习任务总结「15」(java学习知识点路线)
- 2024-10-08 Sonar代码规范分析(sonar代码扫描规则及解决方案)
- 2024-10-08 最详细集合源码解析之ArrayList集合源码解析
- 10-02基于深度学习的铸件缺陷检测_如何控制和检测铸件缺陷?有缺陷铸件如何处置?
- 10-02Linux Mint 22.1 Cinnamon Edition 搭建深度学习环境
- 10-02AWD-LSTM语言模型是如何实现的_lstm语言模型
- 10-02NVIDIA Jetson Nano 2GB 系列文章(53):TAO模型训练工具简介
- 10-02使用ONNX和Torchscript加快推理速度的测试
- 10-02tensorflow GPU环境安装踩坑日记_tensorflow配置gpu环境
- 10-02Keye-VL-1.5-8B 快手 Keye-VL— 腾讯云两卡 32GB GPU保姆级部署指南
- 10-02Gateway_gateways
- 最近发表
-
- 基于深度学习的铸件缺陷检测_如何控制和检测铸件缺陷?有缺陷铸件如何处置?
- Linux Mint 22.1 Cinnamon Edition 搭建深度学习环境
- AWD-LSTM语言模型是如何实现的_lstm语言模型
- NVIDIA Jetson Nano 2GB 系列文章(53):TAO模型训练工具简介
- 使用ONNX和Torchscript加快推理速度的测试
- tensorflow GPU环境安装踩坑日记_tensorflow配置gpu环境
- Keye-VL-1.5-8B 快手 Keye-VL— 腾讯云两卡 32GB GPU保姆级部署指南
- Gateway_gateways
- Coze开源本地部署教程_开源canopen
- 扣子开源本地部署教程 丨Coze智能体小白喂饭级指南
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)