Java语言程序设计——篇十一(3)
2025-06-24 12:38:45
来源:新华网
🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿
- 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳🌳
您的点赞👍、关注➕、收藏⭐️、评论📝、私信📧是我最大的支持与鼓舞!!!🌻🌻🌻
集合——Set
- Set接口及实现类
- HashSet类
- 实战演练
- 用Set对象实现集合操作
- TreeSet类
- 实战演练
- 实战演练
- 对象顺序
- 实战演练
- 综合实例
Set接口及实现类
- Set接口是Collection的子接口,其中不允许有重复的元素。
- Set接口没有定义新的方法,只包含从Collection接口继承的方法。
- Set接口的常用实现类有:HashSet类、TreeSet类。
HashSet类
- HashSet类用散列方法存储元素,具有最好的存取性能,但元素没有顺序。
- HashSet类的构造方法有:
HashSet(): 初始容量是16,默认装填因子是0.75。
HashSet(Collection c)
HashSet(int initialCapacity)
HashSet(int initialCapacity, float loadFactor)
实战演练
例:HashSetDemo.java
importjava.util.*;publicclassHashSetDemo{ publicstaticvoidmain(String[]args){ Set<String>words =newHashSet<>();words.add("one");words.add("two");words.add("three");words.add("one");//不能将重复元素添加到集合中for(Strings:words)System.out.print(s+" ");}}
用Set对象实现集合操作
- 使用Set对象的批量操作方法,可以实现标准集合代数运算。
- 假设s1和s2是Set对象,下面的操作可实现相关的集合运算。
s1.addAll(s2):实现集合s1与s2的并运算。
s1.retainAll(s2):实现集合s1与s2的交运算。
s1.removeAll(s2):实现集合s1与s2的差运算。
s1.containAll(s2):如果s2是s1的子集,该方法返回true。
TreeSet类
- TreeSet实现一种树集合,它使用红-黑树算法为元素排序,因此集合中的元素是有序存放的。
- 添加到TreeSet中的元素必须是可比较的,即元素的类必须实现Comparable接口。
- 构造方法如下:
TreeSet()
TreeSet(Collection c)
TreeSet(Comparator c)
实战演练
例:TreeSetDemo.java
importjava.util.*;publicclassTreeSetDemo{ publicstaticvoidmain(String[]args){ Set<String>ts =newTreeSet<>();String[]s =newString[]{ "one","two","three","four"};for(inti =0;i <s.length;i++){ ts.add(s[i]);// TreeSet中的元素将自动排序}System.out.println(ts);}}
- TreeSet类实现了SortedSet接口中的常用方法:
Efirst():返回有序集合中的第一个元素。Elast():返回有序集合中的最后一个元素。SortedSet<E>subset(Efrom,Eto):返回从元素from到to(不包含)结束的子有序集合。SortedSet<E>headset(Eto):返回小于元素to的子有序集合。SortedSet<E>tailset(Efrom):返回大于等于元素from的子有序集合。Comparator<?superE>comparator():返回与该有序集合相关的比较器,若集合采用自然顺序,返回null。
实战演练
例:SortedSetDemo.java
importjava.util.*;publicclassSortedSetDemo{ publicstaticvoidmain(String[]args){ SortedSet<String>set =newTreeSet<>();set.add("one");set.add("two");set.add("three");System.out.println(set);//[one, three, two]System.out.println(set.first());System.out.println(set.last());System.out.println(set.subSet("one","three"));System.out.println(set.headSet("two"));System.out.println(set.tailSet("three"));System.out.println(set.comparator());}}
对象顺序
- 所谓自然顺序(natural order),是指集合对象实现了Comparable接口的compareTo()方法,对象则根据该方法排序。
- 如果需要指定新的比较规则,可以定义一个类实现Comparator接口,然后为集合提供一个新的比较器。
实战演练
例: 使用TreeSet类实现字符串的正序及逆序排序。
importjava.util.*;publicclassDescSortDemo{ publicstaticvoidmain(String[]args){ String[]s ={ "China","England","France","America","Russia",};Set<String>ts =newTreeSet<>();for(inti =0;i <s.length;i ++)ts.add(s[i]);System.out.println(ts);//使用Lambda表达式实现字符串倒序ts =newTreeSet<>((Strings1,Strings2)->s2.compareTo(s1));// 将数组s中的元素添加到TreeSet对象中for(inti =0;i <s.length;i ++)ts.add(s[i]);System.out.println(ts);}}
综合实例
在Java中,Set是一个不包含重复元素的集合。Set接口主要由HashSet、LinkedHashSet和TreeSet等类实现,每个实现类都有其特定的用途和特性。下面,我将给出一个使用HashSet的简单例子,因为HashSet是Set接口的一个常用实现,它基于哈希表实现,不保证集合的迭代顺序。
importjava.util.HashSet;importjava.util.Iterator;importjava.util.Set;publicclassSetExample{ publicstaticvoidmain(String[]args){ // 创建一个HashSet对象 Set<String>mySet =newHashSet<>();// 向HashSet中添加元素 mySet.add("Apple");mySet.add("Banana");mySet.add("Cherry");mySet.add("Date");// 注意:即使再添加一次"Apple",它也不会被重复添加 mySet.add("Apple");// 遍历HashSet System.out.println("Set contains the following elements:");Iterator<String>iterator =mySet.iterator();while(iterator.hasNext()){ Stringelement =iterator.next();System.out.println(element);}// 检查Set是否包含某个元素 if(mySet.contains("Banana")){ System.out.println("The set contains Banana.");}// Set的大小 System.out.println("Size of the set: "+mySet.size());// 移除元素 mySet.remove("Cherry");System.out.println("After removing Cherry, the set contains:");for(Stringstr :mySet){ // 使用增强的for循环遍历Set System.out.println(str);}// 清空Set mySet.clear();System.out.println("After clearing the set, is it empty? "+mySet.isEmpty());}}
这段代码首先创建了一个HashSet
的实例,并向其中添加了一些字符串元素(包括一个重复的元素,但HashSet不会存储重复元素)。然后,它使用Iterator遍历了集合中的所有元素,并打印出来。接着,它检查集合是否包含某个特定元素(在这个例子中是"Banana"),并输出了集合的大小。之后,它移除了集合中的一个元素(“Cherry”),并再次遍历集合以显示更改后的内容。最后,它清空了集合,并检查集合是否为空。
博主用心写,读者点关注,互动传真情,知识不迷路。