优秀的编程知识分享平台

网站首页 > 技术文章 正文

Java Set的基本操作及高级用法(java中set)

nanyue 2024-10-08 05:38:00 技术文章 5 ℃

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]
最近发表
标签列表