Java集合类--List集合,Set集合,Map集合

        集合可以看作一个容器,Java中提供了不同的集合类,这些类具有不同的存储对象的方式,同时提供了相应的方法,以便用户对集合进行遍历、添加、删除、查找指定的对象。

1.集合类概述:

        集合类类似于数组,与数组不同的是,数组的长度是固定的,集合的长度是可变的数组用来存放基本类型数据,集合用来存放对象的引用。

1.1 常用集合:

        1.1.1 List集合

        List集合继承了Collection接口

        1.1.2 Set集合

        List集合继承了Collection接口

        1.1.3 Map集合

2.Collection接口

        Collection接口是集合类层次结构中的根接口,Collection接口通常不能直接使用,但该接口提供了添加元素,删除元素,管理数据的方法。因为Set和List集合都继承了Collection接口,所以Set集合和List集合都具备这些增删改查方法。

Collection接口的常用方法
方法功能描述
add(E e)将指定的对象添加到该集合中
remove(Object obj)将指定的对象从该集合中移除
isEmpty()返回boolean值,用于判断该集合是否为空
iterator()返回在此Collection元素上进行迭代的迭代器,用于遍历集合中的对象
size()返回int型值,获取该集合中的元素个数
package setclass;

import java.util.*;     //导入java.util包,所有使用集合的实例都要添加该语句

public class Muster {
    public static void main(String[] args) {
        Collection<String> list = new ArrayList<>();   // 实例化集合类对象
        list.add("a");  //向集合中添加数据
        list.add("b");
        list.add("c");
        Iterator<String> it = list.iterator();  //创建list这个集合的迭代器
        while (it.hasNext()) {      //判断是否有下一个元素
            String str = (String) it.next();    //迭代器.next()方法用于获取下一个元素
            System.out.println(str);
        }
    }
}

输出:
        a
        b
        c

        iterator的next()方法返回的是Object对象。

3.List集合

        List集合包含List接口及List接口的所有实现类。List集合允许元素重复,类似Java数组,可通过索引访问List集合中的元素。

3.1 List接口

        List接口因为继承了Collection接口,所以具备Collection接口的所有方法,除此之外,List接口还额外实现了2种非常重要的方法:

        3.1.1 get(int index):获取指定索引位置元素

        3.1.2 set(int index, object obj):修改集合中指定索引位置处的元素为object;

3.2 List接口的实现类

        3.2.1 ArrayList

        优点:

        ArrayList类实现了可变数组,允许保存所有元素,包括null,并可以根据索引位置对集合进行快速的随机访问;

        缺点:

        向指定的索引位置插入对象或者删除对象的速度较慢。

         ArrayList类实现List接口的语法:
        List<E > list = new ArrayList<>();

        E可以是Java合法的数据类型,如String;

        3.2.2 LinkedList

        优点:

        LinkedList类采用链表结构保存对象。便于向集合中插入/删除对象,这种LinkedList类效率较高;

        缺点:

        对于根据索引位置随机访问集合中的对象,LinkedList类实现List集合的效率较低;

        LinkedList类实现List接口的语法:
        List<E e> list = new LinkedList<>();

        E可以是Java合法的数据类型,如String;

package setclass;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Gather {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();  //创建集合对象
        list.add("a");
        list.add("b");
        list.add("c");
        int i = (int) (Math.random() * list.size());   //根据结合长度获取0~2之间的随机数
        System.out.println("随机获得集合中的元素:" + list.get(i));
        list.remove(2); //将索引为2的位置的元素从集合中移除
        System.out.println("将索引为2位置的元素移除后,集合的元素有:");
        Iterator<String> it = list.iterator();
        int j = 0;
        while (j < list.size()) {
            System.out.println(list.get(j));
            j++;
        }
    }
}

输出:
        随机获得集合中的元素:c
        将索引为2位置的元素移除后,集合的元素有:
        a
        b

4.Set集合

        Set集合对象不按特定的方式排序,只是简单地将对象加入集合中,但是Set集合中不能有重复对象;Set集合由Set接口和实现Set接口的实现类组成。Set接口也继承了Collection类,所以实现Set接口的集合类也包含Collection相关的方法。

4.1 Set接口

        Set接口常用的实现类有HashSet和TreeSet。

4.2 Set接口的实现类

        4.2.1 HashSet

        HashSet类实现Set接口,由哈希表(实际上就是一个HashMap实例)支持,不保证Set集合的迭代顺序,此类允许使用null元素。

        4.2.2 TreeSet

        TreeSet不仅实现了Set接口,还实现了java.utl.SortedSet接口,因此TreeSet实现的Set集合在遍历时按照自然顺序递增排序,也开一按照指定比较器递增排序。

TreeSet类增加的方法
方法功能描述
first()返回此Set集合中第一个(最低)元素
last()返回此Set集合中最后一个(最高)元素
comparator()返回对此Set集合中元素进行排序的比较器,如果此Set使用自然排序,则返回null
headSet(E toElement)返回一个新的Set集合,新集合是toElement(不包含)之前的所有对象
tailSet(E fromElement)返回一个新的Set集合,新集合是fromElement(包含)之后的所有对象
subSet(E fromElement, E toElement)返回一个新的Set集合,新集合是fromElementn(包含)到toElement(不包含)之间的所有对象
package setclass;

import java.util.Iterator;
import java.util.TreeSet;

public class updateStu implements Comparable<Object> {   //创建类,实现Comparator接口
    String name;
    long id;

    public updateStu(String name, int id) {      //构造方法
        this.name = name;
        this.id = id;
    }

    public int compareTo(Object o) {
        updateStu up_stu = (updateStu) o;
        int result = id > up_stu.id ? 1 : (id == up_stu.id ? 0 : -1);   //对比两个对象id大小
        return result;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public static void main(String[] args) {
        updateStu stu1 = new updateStu("春田1", 101);
        updateStu stu2 = new updateStu("春田2", 102);
        updateStu stu3 = new updateStu("春田3", 103);
        updateStu stu4 = new updateStu("春田4", 104);

        TreeSet<updateStu> tree = new TreeSet<>();
        tree.add(stu1);
        tree.add(stu2);
        tree.add(stu3);
        tree.add(stu4);

        Iterator<updateStu> it = tree.iterator();       //Set集合中所有对象的迭代器
        System.out.println("TreeSet集合中的所有元素:");
        while (it.hasNext()) {
            updateStu up_stu = (updateStu) it.next();
            System.out.println(up_stu.getId() + " " + up_stu.getName());
        }

        it = tree.headSet(stu3).iterator();    //截取stu2对象之前的所有对象集合
        System.out.println("截取前面的部分集合:");
        while (it.hasNext()) {
            updateStu up_stu = (updateStu) it.next();
            System.out.println(up_stu.getId() + " " + up_stu.getName());
        }

        it = tree.subSet(stu1, stu3).iterator();
        System.out.println("截取中间部分的集合:");
        while (it.hasNext()) {
            updateStu up_stu3 = (updateStu) it.next();
            System.out.println(up_stu3.getId() + " " + up_stu3.getName());
        }
    }
}

输出:
        TreeSet集合中的所有元素:
        101 春田1
        102 春田2
        103 春田3
        104 春田4
        截取前面的部分集合:
        101 春田1
        102 春田2
        截取中间部分的集合:
        101 春田1
        102 春田2

        存入TreeSet类实现的Set集合必须实现Comparable接口,该接口中的CompareTo(Object o)方法比较此对象与指定对象的顺序,如果该对象小于,等于或大于指定对象,则分别返回负整数,0,正整数。

5.Map集合

        Map集合提供的是key-value的映射关系,Map中不能包含相同的key,可以有相同的value,Map集合包含Map接口以及Map接口的所有实现类。

        Map结合中允许值对象时null,而且允许多个。

5.1 Map接口

Map接口中的常用方法
方法功能描述
put(K key, V value)向集合中添加指定的key-value的映射关系
get(Object key)获取key的对象,如果存在指定的key对象,则返回该key对象的值,否则返回null
containsKey(Object key)如果此集合包含指定key的映射关系,则返回true,否则返回false
containsValue(Object key)如果此集合包含指定value的映射关系,则返回true,否则返回false
keySet()返回此集合中所有key对象形成的Set集合
valueSet()返回该集合中所有值对象形成的Collection集合
package mapclass;

import java.util.*;

public class UpdateStu {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();  //创建map实例
        map.put("01", "春田1");
        map.put("02", "春田2");

        Set<String> set = map.keySet(); //构建所有key对象的集合
        Iterator<String> it = set.iterator();   //构建集合迭代器
        System.out.println("key集合中的元素:");
        while (it.hasNext()) {
            String stu = it.next();
            System.out.println(stu);
        }

        Collection<String> coll = map.values(); //构建Map集合中所有values值的集合
        it = coll.iterator();
        System.out.println("value集合中的元素:");
        while (it.hasNext()) {
            String stu = it.next();
            System.out.println(stu);
        }
    }
}

输出:
        key集合中的元素:
        01
        02
        value集合中的元素:
        春田1
        春田2

5.2 Map接口的实现类

        Map接口的实现类有HashMap和TreeMap。

        5.2.1 HashMap

        HashMap类是基于hash表的Map接口实现,HashMap通过哈希码对其内部的映射关系进行快速查找,并允许使用null键和null值,但是必须保证键的唯一性。

        优点:

        HashMap类实现的Map集合添加和删除映射关系效率更高;

        缺点:   

        此类不保证映射的顺序;

        5.2.2 TreeMap

        TreeMap类不仅实现了Map接口,还实现了java.util.SortedMap接口,因此,集合中的映射关系具有顺序。

        优点:

        集合中的映射关系具有顺序;

        缺点:

        在添加、删除、定位映射关系时,效率较低,且不允许键为null;

package mapclass;

import java.util.*;

public class MapText {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();   //由HashMap实现的Map对象

        Emp emp = new Emp("105", "春田1");     //创建Mmp对象
        Emp emp1 = new Emp("103", "春田2");
        Emp emp2 = new Emp("101", "春田3");
        Emp emp3 = new Emp("102", "春田4");
        Emp emp4 = new Emp("104", "春田5");

        map.put(emp.getE_id(), emp.getE_name());     //将对象添加到集合中
        map.put(emp1.getE_id(), emp1.getE_name());
        map.put(emp2.getE_id(), emp2.getE_name());
        map.put(emp3.getE_id(), emp3.getE_name());
        map.put(emp4.getE_id(), emp4.getE_name());

        Set<String> key_set = map.keySet();     //获取Map集合中的所有Key对象集合
        Iterator<String> it = key_set.iterator();       //获取keyset集合对象迭代器
        while (it.hasNext()) {
            String key_str = (String) it.next();
            String name = (String) map.get(key_str);     //通过key获取Map对象value
            System.out.println(key_str + " " + name);
        }

        TreeMap<String, String> tree_map = new TreeMap<>();  //创建TreeMap集合对象
        tree_map.putAll(map);       //将集合对象map添加到TreeMap集合对象中
        Iterator<String> iter = tree_map.keySet().iterator();
        System.out.println("TreeMap类实现的Map集合,键对象升序:");
        while (iter.hasNext()) {
            String key_treemap_str = (String) iter.next();
            String name = tree_map.get(key_treemap_str);
            System.out.println(key_treemap_str + " " + name);
        }

    }
}

输出:
        101 春田3
        102 春田4
        103 春田2
        104 春田5
        105 春田1
        TreeMap类实现的Map集合,键对象升序:
        101 春田3
        102 春田4
        103 春田2
        104 春田5
        105 春田1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/107918.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

公网远程访问macOS本地web服务器

# 公网访问macOS本地web服务器【内网穿透】 文章目录 1. 启动Apache服务器2. 公网访问本地web服务2.1 本地安装配置cpolar2.2 创建隧道2.3 测试访问公网地址3. 配置固定二级子域名3.1 保留一个二级子域名3.2 配置二级子域名4. 测试访问公网固定二级子域名 以macOS自带的Apache…

局域网内两台电脑共享文件夹(通过网线直连共享数据)

文章目录 2.设置共享文件夹3.访问共享文件夹 1.将两台电脑置于同一局域网下 用网线将两台电脑连接关闭两台电脑防火墙将两台电脑IP地址设置在同一局域网下 测试是否在同一局域网下&#xff0c;使用ping命令 ping 192.168.0.122.设置共享文件夹 选择想要共享的文件夹&#xff…

基于单片机的智能电子鼻的设计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、智能电子鼻系统的设计方案1.1智能电子鼻系统的设计思路1.2智能电子鼻系统的设计流程图1.3智能电子鼻系统的硬件数…

Android系统的特性

目录 Android系统的特性 1. 显示布局 2. 数据存储 3. 网络 4. 信息 5. 浏览器 6. 编程语言支持 7. 媒体支持 8. 流媒体支持 9. 硬件支持 10. 多点触控 11.蓝牙 12. 多任务处理 13. 语音功能 14.无线共享功能 15. 截图功能 16. 跨平台 17. 应用程序的安全机制…

IT行业变成了夕阳行业

IT技术发展背景及历程 从2010年左右开始&#xff0c;大众创新&#xff0c;万众创业变成了一个经常看到的词语&#xff0c;在创业潮的带动下&#xff0c;同时刚好赶上了互联网的高速发展&#xff0c;一大批互联网创业公司应运而生&#xff0c;在这样的背景下&#xff0c;IT行业…

JVM进阶(3)

一)什么是垃圾&#xff1f; 垃圾指的是在应用程序中没有任何指针指向的对象&#xff0c;这个对象就是需要被回收的垃圾&#xff0c;如果不及时的针对内存中的垃圾进行清理&#xff0c;那么这些垃圾对象所占用的内存空间可能一直保留到应用程序结束&#xff0c;被保留的空间无法…

常见排序算法之冒泡排序

冒泡排序&#xff0c;英文名Bubble Sort&#xff0c;是一种相对基础的 交换排序方法。这种排序算法的名字来源于它操作的过程&#xff0c;可以类比为数列中的每一个元素都可以像小气泡一样&#xff0c;根据自身的大小一点一点向数组的一侧移动。具体到冒泡排序的工作原理&#…

即时编译器JIT

类编译加载执行过程 如下图所示&#xff0c;一个Java代码从编译到运行大抵会经历以下几个过程。具体每个过程笔者会在下文站展开讨论。 类编译 首先是类编译阶段&#xff0c;这个阶段会将Java文件变为class文件&#xff0c;这个class文件包含一个常量池和方法表集合&#xf…

Android数据对象序列化原理与应用

序列化与反序列化 序列化是将对象转换为可以存储或传输的格式的过程。在计算机科学中&#xff0c;对象通常是指内存中的数据结构&#xff0c;如数组、列表、字典等。通过序列化&#xff0c;可以将这些对象转换为字节流或文本格式&#xff0c;以便在不同的系统之间进行传输或存…

【机器学习可解释性】4.SHAP 值

机器学习可解释性 1.模型洞察的价值2.特征重要性排列3.部分依赖图4.SHAP 值5.SHAP 值 高级使用 正文 理解各自特征的预测结果&#xff1f; 介绍 您已经看到(并使用)了从机器学习模型中提取一般解释技术。但是&#xff0c;如果你想要打破模型对单个预测的工作原理? SHAP 值…

Postman —— 配置环境变量

PostMan是一套比较方便的接口测试工具&#xff0c;但我们在使用过程中&#xff0c;可能会出现创建了API请求&#xff0c;但API的URL会随着服务器IP地址的变化而改变。 这样的情况下&#xff0c;如果每一个API都重新修改URL的话那将是非常的麻烦&#xff0c;所以PostMan中也提供…

Sprint Cloud Stream整合RocketMq和websocket实现消息发布订阅

1.引入RocketMQ依赖&#xff1a;首先&#xff0c;在pom.xml文件中添加RocketMQ的依赖&#xff1a; <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.0</versi…

J2EE项目部署与发布(Windows版本)->会议OA单体项目Windows部署,spa前后端分离项目Windows部署

会议OA单体项目Windows部署spa前后端分离项目Windows部署 1.会议OA单体项目Windows部署&#xff08;以实施的角度&#xff09; 将项目放入webapp&#xff0c;项目能够访问: 首先拿到war包和数据库脚本&#xff0c;并检查是否有什么问题。 如何查看项目报错信息&#xff08;当你…

Nginx性能优化

简介 nginx作为常用的web代理服务器&#xff0c;某些场景下对于性能要求还是蛮高的&#xff0c;所以本片文章会基于操作系统调度以及网络通信两个角度来讨论一下Nginx性能的优化思路。 基于操作系统调度进行Nginx优化 CPU工作方式 对于用户进程&#xff0c;CPU会按照下面的…

深入浅出排序算法之堆排序

目录 1. 算法介绍 2. 执行流程⭐⭐⭐⭐⭐✔ 3. 代码实现 4. 性能分析 1. 算法介绍 堆是一种数据结构&#xff0c;可以把堆看成一棵完全二叉树&#xff0c;这棵完全二叉树满足&#xff1a;任何一个非叶结点的值都不大于(或不小于)其左右孩子结点的值。若父亲大孩子小&#x…

计算机操作系统重点概念整理-第三章 进程同步【期末复习|考研复习】

第三章 进程同步 【期末复习|考研复习】 计算机操作系统系列文章传送门&#xff1a; 第一章 计算机系统概述 第二章 进程管理 第三章 进程同步 第四章 内存管理 第五章 文件管理 第六章 输出输出I/O管理 文章目录 第三章 进程同步 【期末复习|考研复习】前言三、进程同步3.1 临…

C# 递归算法使用简介_常用整理

一、递归简介 递归算法是一种直接或者间接调用自身函数或者方法的算法。 递归算法的实质是把问题分解成规模缩小的同类问题的子问题&#xff0c;然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效&#xff0c;它可以使算法简洁和易于理解。 递归本质是循环&a…

Visual Studio Code的下载与安装

Visual Studio Code&#xff08;简称 VS Code&#xff09;是由 Microsoft 开发的免费、开源的文本编辑器&#xff0c;适用于多种操作系统&#xff0c;包括 Windows、macOS 和 Linux。它的设计目标是成为一款轻量级、高效的代码编辑工具&#xff0c;同时提供丰富的扩展和功能&am…

MySQL初始化之后启动报错(mysqld: Table ‘mysql.plugin‘ doesn‘t exist)

报错场景 初始化之后&#xff0c;服务无法启动。错误日志error-log 报错如下&#xff1a;&#xff08;mysql库下的系统表不存在&#xff09; 2023-10-26T06:03:08.150163-00:00 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2023-10-26T06:03:08.496…

Vite+Vue3项目全局引入scss文件

前言 Sass 是世界上最成熟、最稳定、最强大的专业级CSS扩展语言&#xff01;在日常项目开发过程中使用非常广泛&#xff0c;今天主要讲一下 ViteVue3 项目中该如何全局引入 scss 文件&#xff0c;引入混合 mixin 文件的不同配置。捎带说一下 Vue2 中的引入方式做一下简单的对比…