Java基础之集合Set详解

网友投稿 208 2023-01-16

Java基础之集合Set详解

一、概述

Set是java中的集合类,提供了一种无顺序,不重复的集合。常用的子类包括HashSet, TreeSet等。

HashSet底层使用HashMap实现,根据元素的hashCode和equals来判断是否为重复元素。当元素的hashCode相同且equals返回true时则认为是重复元素。因为使用了hash算法所以HashSet有很好的添加和访问性能。可以放入null但只能放一个null

TreeSet底层使用红黑树实现,Set上的元素被放在一个自动排序的红黑树中。不能放入null

二、Set的常用方法

add() 向Set中添加元素

size() 返加Set的大小,即Set中元素的数量

remove(Object o) 从Set上删除元素

boolean contains(Object o) 检查Set中是否包含某个元素,包含返回true,不包含返回false

iterator() 返回Set的迭代器

clear() 清空Setis

Empty() 检查Set是否为空,为空返回true, 否则返回false

package collect;

import java.util.HashSet;

import java.util.Set;

/**

* [简要描述]:Set使用

* [详细描述]:

*

* @author Smalight Lv

* @version 1.0, 2021/5/6 15:15

* @since JDK 1.8

*/

public class SetTest1 {

public static void main(String[] args) {

Set set = new HashSet<>();

//添加元素到Set

set.add("张三");

set.add("李四");

set.add("王五");

//打印Set

System.out.println(set);

//再加入一个王五,不能添加成功

boolean rst = set.add("王五");

System.out.println("添加结果:" + rst);

System.out.println(set);

//HashSet可以加入null,但只能加入一个null

rst = set.add(null);

System.out.println("添加第一个null:" + rst);

System.out.println(set);

rst = set.add(null);

System.out.println("添加第二个null:" + rst);

System.out.println(set);

//判断Set中是否包含某个元素

rst = set.contains("张三");

System.out.println("是否包含元素\"张三\":" + rst);

//删除元素

set.remove("张三");

System.out.println(set);

//判断Set中是否包含某个元素

rst = set.contains("张三");

System.out.println("是否包含元素\"张三\":" + rst);

//Set的大小,即Set中元素的数量

int size = set.size();

System.out.println("Set的大小:" + size);

//判断Set是否为空

boolean isEmpty = set.isEmpty();

System.out.println("Set是否为空:" + isEmpty);

//清空Set

set.clear();

System.out.println(set);

//判断Set是否为空

isEmpty = set.isEmpty();

System.out.println("Set是否为空:" + isEmpty);

}

}

运行结果:

[李四, 张三, 王五]

添加结果:false

[李四, 张三, 王五]

添加第一个null:true

[null, 李四, 张三, 王五]

添加第二个null:false

[null, 李四, 张三, 王五]

是否包含元素"张三":true

[null, 李四, 王五]

是否包含元素"张三":false

Set的大小:3

Set是否为空:false

[]

Set是否为空:true

注:TreeSet不能添加null元素,添加null时会抛出NullPointerException异常

package collect;

import java.util.Set;

import java.util.TreeSet;

/**

* [简要描述]: Set

* [详细描述]:

*

* @author Smalight Lv

* @version 1.0, 2021/5/6 16:28

* @since JDK 1.8

*/

public class SetTest2 {

public static void main(String[] args) {

Set set = new TreeSet<>();

//TreeSet不能加入null

boolean rst = set.add(null);

System.out.println("添加第一个null:" + rst);

System.out.println(set);

}

}

运行结果:

Exception in thread "main" java.lang.NullPointerException

 at java.util.TreeMap.compare(TreeMap.java:1294)

 at java.util.TreeMap.put(TreeMap.java:538)

 at java.util.TreeSet.add(TreeSet.java:255)

 at collect.SetTest2.main(SetTest2.java:19)

package collect;

import java.util.TreeSet;

/**

* [简要描述]: Set

* [详细描述]:

*

* @author Smalight Lv

* @version 1.0, 2021/5/6 16:28

* @since JDK 1.8

*/

public class SetTest3 {

public static void main(String[] args) {

TreeSet set = new TreeSet<>();

//添加元素到Set

set.add("B");

set.add("A");

set.add("李四");

set.add("王五");

set.add("张三");

set.add("a");

//打印Set

System.out.println(set);

//再加入一个王五,不能添加成功

boolean rst = set.add("王五");

System.out.println("添加结果:" + rst);

System.out.println(set);

//获取Set中的第一个元素

System.out.println(set.first());

//获取Set中的最后一个元素

System.out.println(set.last());

//判断Set中是否包含某个元素

rst = set.contains("张三");

System.out.println("是否包含元素\"张三\":" + rst);

//删除元素

set.remove("张三");

System.out.println(set);

//判断Set中是否包含某个元素

rst = set.contains("张三");

System.out.println("是否包含元素\"张三\":" + rst);

//Set的大小,即Set中元素的数量

int size = set.size();

System.out.println("Set的大小:" + size);

//判断Set是否为空

boolean isEmpty = set.isEmpty();

System.out.println("Set是否为空:" + isEmpty);

//清空Set

set.clear();

System.out.println(set);

//判断Set是否为空

isEmpty = set.isEmpty();

System.out.println("Set是否为空:" + isEmpty);

}

}

运行结果:

[A, B, a, 张三, 李四, 王五]

添加结果:false

[A, B, a, 张三, 李四, 王五]

A

王五

是否包含元素"张三":true

[A, B, a, 李四, 王五]

是否包含元素"张三":false

Set的大小:5

Set是否为空:false

[]

Set是否为空:true

三、Set的遍历

3.1增强for循环

package collect;

import java.util.HashSet;

import java.util.Set;

/**

* [简要描述]:增强for循环遍历Set

* [详细描述]:

*

* @author Smalight Lv

* @version 1.0, 2021/5/6 17:01

* @since JDK 1.8

*/

public class SetTest4 {

public static void main(String[] args) {

Set set = new HashSet<>();

set.add("唐僧");

set.add("孙悟空");

set.add("猪悟能");

set.add("沙悟净");

System.out.println(set);

for(String item:set){

System.out.println(item);

}

}

}

运行结果:

[猪悟能, 孙悟空, 沙悟净, 唐僧]

猪悟能

孙悟空

沙悟净

唐僧

3.2 迭代器遍历

package collect;

import java.util.HashSet;

import java.util.Iterator;

import java.util.Set;

/**

* [简要描述uHiLkuRXLS]:增强for循环遍历Set

* [详细描述]:

*

* @author Smalight Lv

* @version 1.0, 2021/5/6 17:01

* @since JDK 1.8

*/

public class SetTest5 {

public static void main(String[] args) {

Set set = new HashSet<>();

set.add("唐僧");

set.add("孙悟空");

set.add("猪悟能");

set.add("沙悟净");

System.out.println(set);

Iterator iterator = set.iterator();

while(iterator.hasNext()){

System.out.println(iterator.next());

}

}

}

运行结果:

[猪悟能, 孙悟空, 沙悟净, 唐僧]

猪悟能

孙悟空

沙悟净

唐僧

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:JVM中ClassLoader类加载器的深入理解
下一篇:java数组算法例题代码详解(冒泡排序,选择排序,找最大值、最小值,添加、删除元素等)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~