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

在这里插入图片描述
在这里插入图片描述

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

  • 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳🌳
    您的点赞👍、关注➕、收藏⭐️、评论📝、私信📧是我最大的支持与鼓舞!!!🌻🌻🌻

集合——Set

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

```java
import java.util.*;

public class HashSetDemo {
     public static void main(String[] args) {
Set 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

```java
import java.util.*;
public class TreeSetDemo{
    public static void main(String[] args){
Set 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接口中的常用方法:

    ```java
    E first(): 返回有序集合中的第一个元素。
    E last(): 返回有序集合中的最后一个元素。
    SortedSet subset(E from, E to): 返回从元素from到to(不包含)结束的子有序集合。
    SortedSet headset(E to): 返回小于元素to的子有序集合。
    SortedSet tailset(E from): 返回大于等于元素from的子有序集合。
    Comparator comparator(): 返回与该有序集合相关的比较器,若集合采用自然顺序,返回null。

    ```

实战演练

例:SortedSetDemo.java

```java
import java.util.*;
public class SortedSetDemo{
public static void main(String[] args) {    
SortedSet 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类实现字符串的正序及逆序排序。

```java
import java.util.*;
public class DescSortDemo{
  public static void main(String[] args){
     String[] s = {"China", "England","France","America","Russia",};
     Set 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接口的一个常用实现,它基于哈希表实现,不保证集合的迭代顺序。

```java
import java.util.HashSet;  
import java.util.Iterator;  
import java.util.Set;

public class SetExample {  
    public static void main(String[] args) {  
        // 创建一个HashSet对象  
        Set 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 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的实例,并向其中添加了一些字符串元素(包括一个重复的元素,但HashSet不会存储重复元素)。然后,它使用Iterator遍历了集合中的所有元素,并打印出来。接着,它检查集合是否包含某个特定元素(在这个例子中是"Banana"),并输出了集合的大小。之后,它移除了集合中的一个元素(“Cherry”),并再次遍历集合以显示更改后的内容。最后,它清空了集合,并检查集合是否为空。
博主用心写,读者点关注,互动传真情,知识不迷路。

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4988.html

(0)
LomuLomu
上一篇 2024 年 12 月 31 日
下一篇 2024 年 12 月 31 日

相关推荐

  • 华为OD机试E卷 –字符串变换最小字符串 –24年OD统一考试(Java & JS & Python & C & C++)

    文章目录 题目描述 输入描述 输出描述 用例 题目解析 JS算法源码 java算法源码 python算法源码 c算法源码 c++算法源码 题目描述 给定一个字符串s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典序进行比较)。 变换规则:交换字符串中任意两个不同位置的字符。 输入描述 一串小写字母组成的字符串s 输出描述 按照要求进行变换得到的…

    未分类 2025 年 1 月 12 日
    52700
  • 【JavaSE】【网络协议】HTTP 请求和响应

    一、HTTP请求 1.1 请求格式 请求格式:首行+请求头(header)+空行+正文(body) 1.2 首行组成 首行组成:请求方法+URL+版本号。使用“空格”将他们分隔开。 1.2.1 请求方法 方法 说明 支持的HTTP版本 GET 获取资源 1.0 1.1 POST 传输实体主体 1.0 1.1 PUT 传输文件 1.0 1.1 DELETE 删…

    2025 年 1 月 14 日
    46600
  • PostgreSQL 的历史

    “`markdown title: PostgreSQL 的历史date: 2024/12/23updated: 2024/12/23author: cmdragon excerpt:PostgreSQL,这个功能全面且广受青睐的开源关系型数据库管理系统,其起源和发展历史可以追溯至1986年,由加州大学伯克利分校的研究团队所孕育。本文将深入挖掘Postgr…

    2024 年 12 月 24 日
    55100
  • [华为OD机考 – 密语传递 – 基于深度优先搜索的Java实现(2025 A卷 200分)]

    华为2025届OD机考A卷试题库持续更新中,专项练习 _ 戳此进入_ 专题导览 本系列试题已编入《华为OD机考Java真题全集(A/B/C/D/E卷)》。练习频次与中签率正相关, 添加哪吒微信,备注”华为OD备考”,加入专属刷题群 ,每道题配备:解题思路解析、完整代码实现、多组测试数据、算法选择依据、应用场景说明,题库实时更新,24小时在线答疑。 题目要求 …

    2025 年 5 月 12 日
    25700
  • 使用Java高效检索Elasticsearch索引完整数据集的方法

    Java实现Elasticsearch全量数据检索方案 应用场景分析 常规查询机制 Java实现全量数据获取 技术总结 应用场景分析 Elasticsearch在设计时为了优化查询性能,默认配置下对未指定分页参数的查询请求仅返回前10条记录。但在实际业务中,我们经常需要获取符合特定条件的完整数据集。虽然可以通过设置较大的size参数临时解决问题,但随着数据规…

    2025 年 5 月 12 日
    23400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信