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, 否则返回falsepackage 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<String> set = new HashSet<>();//添加元素到Setset.add('张三');set.add('李四');set.add('王五');//打印SetSystem.out.println(set);//再加入一个王五,不能添加成功boolean rst = set.add('王五');System.out.println('添加结果:' + rst);System.out.println(set);//HashSet可以加入null,但只能加入一个nullrst = 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);//清空Setset.clear();System.out.println(set);//判断Set是否为空isEmpty = set.isEmpty();System.out.println('Set是否为空:' + isEmpty); }}
运行结果:
[李四, 张三, 王五]添加结果:false[李四, 张三, 王五]添加第一个null:true[null, 李四, 张三, 王五]添加第二个null:false[null, 李四, 张三, 王五]是否包含元素'张三':true[null, 李四, 王五]是否包含元素'张三':falseSet的大小:3Set是否为空: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<String> set = new TreeSet<>();//TreeSet不能加入nullboolean 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<String> set = new TreeSet<>();//添加元素到Setset.add('B');set.add('A');set.add('李四');set.add('王五');set.add('张三');set.add('a');//打印SetSystem.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);//清空Setset.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, 李四, 王五]是否包含元素'张三':falseSet的大小:5Set是否为空: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<String> 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;/** * [简要描述]:增强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<String> set = new HashSet<>();set.add('唐僧');set.add('孙悟空');set.add('猪悟能');set.add('沙悟净');System.out.println(set);Iterator<String> iterator = set.iterator();while(iterator.hasNext()){ System.out.println(iterator.next());} }}
运行结果:
[猪悟能, 孙悟空, 沙悟净, 唐僧]猪悟能孙悟空沙悟净唐僧
到此这篇关于Java基础之集合Set详解的文章就介绍到这了,更多相关Java集合Set内容请搜索好吧啦网以前的文章或继续浏览下面的相关文章希望大家以后多多支持好吧啦网!
相关文章: