Java语言程序设计——篇十一(3)

倾听一世,繁花盛开 2024-08-22 14:35:02 阅读 95

在这里插入图片描述

在这里插入图片描述

🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿

欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳🌳

您的点赞👍、关注➕、收藏⭐️、评论📝、私信📧是我最大的支持与鼓舞!!!🌻🌻🌻

集合——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

<code>import java.util.*;

public class HashSetDemo { -- -->

public static void main(String[] args) {

Set<String> words = new HashSet<>();

words.add("one");

words.add("two");

words.add("three");

words.add("one"); //不能将重复元素添加到集合中

for(String s: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

<code>import java.util.*;

public class TreeSetDemo{ -- -->

public static void main(String[] args){

Set<String> ts = new TreeSet<>();

String[] s = new String[]{ "one","two","three","four"};

for (int i = 0; i < s.length; i++){

ts.add(s[i]); // TreeSet中的元素将自动排序

}

System.out.println(ts);

}

}

在这里插入图片描述

TreeSet类实现了SortedSet接口中的常用方法:

<code>E first(): 返回有序集合中的第一个元素。

E last(): 返回有序集合中的最后一个元素。

SortedSet<E> subset(E from, E to): 返回从元素from到to(不包含)结束的子有序集合。

SortedSet<E> headset(E to): 返回小于元素to的子有序集合。

SortedSet<E> tailset(E from): 返回大于等于元素from的子有序集合。

Comparator<? super E> comparator(): 返回与该有序集合相关的比较器,若集合采用自然顺序,返回null。

实战演练

例:SortedSetDemo.java

import java.util.*;

public class SortedSetDemo{ -- -->

public static void main(String[] args) {

SortedSet<String> set = new TreeSet<>();

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类实现字符串的正序及逆序排序。

<code>import java.util.*;

public class DescSortDemo{ -- -->

public static void main(String[] args){

String[] s = { "China", "England","France","America","Russia",};

Set<String> ts = new TreeSet<>();

for(int i = 0; i < s.length; i ++)

ts.add(s[i]);

System.out.println(ts);

//使用Lambda表达式实现字符串倒序

ts = new TreeSet<>((String s1, String s2) -> s2.compareTo(s1));

// 将数组s中的元素添加到TreeSet对象中

for(int i = 0; i < s.length; i ++)

ts.add(s[i]);

System.out.println(ts);

}

}

在这里插入图片描述

综合实例

在Java中,Set是一个不包含重复元素的集合。Set接口主要由HashSet、LinkedHashSet和TreeSet等类实现,每个实现类都有其特定的用途和特性。下面,我将给出一个使用HashSet的简单例子,因为HashSet是Set接口的一个常用实现,它基于哈希表实现,不保证集合的迭代顺序。

<code>import java.util.HashSet;

import java.util.Iterator;

import java.util.Set;

public class SetExample { -- -->

public static void main(String[] args) {

// 创建一个HashSet对象

Set<String> mySet = new HashSet<>();

// 向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()) {

String element = 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(String str : mySet) { // 使用增强的for循环遍历Set

System.out.println(str);

}

// 清空Set

mySet.clear();

System.out.println("After clearing the set, is it empty? " + mySet.isEmpty());

}

}

这段代码首先创建了一个HashSet<String>的实例,并向其中添加了一些字符串元素(包括一个重复的元素,但HashSet不会存储重复元素)。然后,它使用Iterator遍历了集合中的所有元素,并打印出来。接着,它检查集合是否包含某个特定元素(在这个例子中是"Banana"),并输出了集合的大小。之后,它移除了集合中的一个元素(“Cherry”),并再次遍历集合以显示更改后的内容。最后,它清空了集合,并检查集合是否为空。

博主用心写,读者点关注,互动传真情,知识不迷路。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。