Java筑基-集合[Set、Map、List、Stack、Queue]

在这里插入图片描述


这里写目录标题

  • 一、Collection接口结构图
  • 二、Set集合
    • 1、常用方法
  • 三、List集合
    • 1、List集合常用方法
    • 2、代码案例
  • 四、Stack集合
    • 1、方法
    • 2、代码展示
  • 五、Queue集合
    • 1、常用的方法
    • 2、代码展示
  • 六、Map集合
    • 1、基本概念
    • 2、常用方法
    • 3、代码展示

一、Collection接口结构图

在这里插入图片描述

二、Set集合

是Collection集合的子集合,与List集合平级
该集合中元素没有先后放入次序,且不允许重复
该集合的主要实现类是:HashSet类、 TreeSet类、LinkedHashSet类

  • HashSet类采用哈希表进行数据管理
  • TreeSet类采用红黑树进行数据管理

1、常用方法

准备一个Set集合指向HashSet对象,向该集合中添加元素"two"并打印,再向集合中添加元素"one"并打印,再向集合中添加元素"three"并打印,再向集合中添加"one"并打印。

package com.company.listp;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.HashSet;

public class SetDemo {
    public static void main(String[] args) {
    	System.out.println("------------------HashSet-----------------");
        Set set = new HashSet();
        System.out.println("set集合:"+set);

        boolean obj = set.add("hello");
        System.out.println("添加是否成功:"+obj);
        System.out.println("Set集合:"+set);

        boolean obj1=set.add("one");
        System.out.println("添加是否成功:"+obj1);
        System.out.println("Set集合:"+set);

        System.out.println("------------------LinkedHashSet-----------------");

        Set set1 = new LinkedHashSet();
        System.out.println("set1集合:"+set1);

        boolean o=set1.add("one");
        System.out.println("添加元素是否成功:"+o);
        System.out.println("set集合:"+set1);

        boolean o1=set1.add("two");
        System.out.println("添加元素是否成功:"+o1);
        System.out.println("set集合:"+set1);
        

    }
}

set集合:[]
添加是否成功:true
Set集合:[hello]
添加是否成功:true
Set集合:[one, hello]
------------------LinkedHashSet-----------------
set1集合:[]
添加元素是否成功:true
set集合:[one]
添加元素是否成功:true
set集合:[one, two]

Process finished with exit code 0

三、List集合

java.util.List集合是Collection集合的子集合
List集合中允许有重复的元素并且有先后放入次序

List集合的主要实现类有:ArrayList类、LinkedList类、Stack类、Vector类。

  • ArrayList类的底层是采用动态数组进行数据管理的,支持下标访问增删元素不方便
  • LinkedList类的底层是采用双向链表进行数据管理的,访问不方便增删元素方便
  • Stack类的底层是采用动态数组进行数据管理的,主要管理的是后进先出特征的数据结构,叫做栈
  • Vector类是比ArrayList类更线程安全的类,但是效率比较低,已过时。每次扩容是2倍。

1、List集合常用方法

在这里插入图片描述

2、代码案例

package com.company.listp;
import java.util.ArrayList;
import java.util.List;
public class ListDemo {
    public static void main(String[] args) {
        //list集合声明
        List ls = new ArrayList();
        // 添加元素 Collection
        ls.add("one");
        ls.add("two");

        System.out.println(ls);   //[one, two]
        // add(int,E)
        ls.add(0,"study");
        ls.add(1,"play");
        System.out.println(ls);   //[study, play, one, two]
        // addAll()
        List ls1 = new ArrayList();
        ls1.add("qwe");
        ls1.add("asd");
        ls1.add("qwe");
        System.out.println(ls1);   //[qwe, asd]
        System.out.println("------------------addAll-----------------");
        ls.addAll(2,ls1);
        System.out.println(ls);  //[study, play, qwe, asd, one, two]

        System.out.println("------------------get-----------------");
        Object o=ls.get(2);
        System.out.println("获取下标元素:"+o);   //qwe

        System.out.println("------------------get重写toString-----------------");
        System.out.println("ls="+ls);
        System.out.println("ls的长度为"+ls.size());

        System.out.println("------------------元素出现的索引位置-----------------");
        System.out.println(ls.indexOf("play"));         //list第一次出现的索引位置
        System.out.println(ls.lastIndexOf("qwe"));   //list最后一次出现的索引位置

        System.out.println("------------------set修改指定位置元素-----------------");
        ls.set(4,8888);
        System.out.println("ls:"+ls);   //ls:[study, play, qwe, asd, 8888, one, two]

        Integer ls5=(Integer) ls.set(4,"three");
        System.out.println(ls5);   //8888
        System.out.println("修改后的ls为:"+ls);   //修改后的ls为:[study, play, qwe, asd, three, one, two]


        System.out.println("------------------删除元素-----------------");
        ls.remove(ls.remove(0));
        System.out.println("删除后的ls为:"+ls);  //删除后的ls为:[play, qwe, asd, three, one, two]

        System.out.println("------------------获取子集合-----------------");
        //获取当前集合中的子集合,将集合的一部分内容获取出来
        //子集合和当前集合公用一块内存空间
        //获取当前集合 从下标1开始到3之间的元素[1,3) 包含1不包含3
        System.out.println("子集合为:"+ls.subList(1,3));


    }
}

[one, two]
[study, play, one, two]
[qwe, asd, qwe]
------------------addAll-----------------
[study, play, qwe, asd, qwe, one, two]
------------------get-----------------
获取下标元素:qwe
------------------get重写toString-----------------
ls=[study, play, qwe, asd, qwe, one, two]
ls的长度为7
------------------元素出现的索引位置-----------------
1
4
------------------set修改指定位置元素-----------------
ls:[study, play, qwe, asd, 8888, one, two]
8888
修改后的ls为:[study, play, qwe, asd, three, one, two]
------------------删除元素-----------------
删除后的ls为:[play, qwe, asd, three, one, two]
------------------获取子集合-----------------
子集合为:[qwe, asd]

Process finished with exit code 0

四、Stack集合

1、方法

在这里插入图片描述

2、代码展示

package com.company.listp;

import java.util.Stack;

public class StackDemo {
    public static void main(String[] args) {
        //1、准备Stack集合
        Stack stack=new Stack();
        System.out.println("stack="+stack);

        //2、数据11、22、33、44、55依次入栈
        for (int i=2;i<6;i++){
            Object push = stack.push(i*11);
            System.out.println("入栈的元素为:"+push);
            System.out.println("栈中的元素有:"+stack);
        }
        //查看栈顶元素并打印
        Object peek = stack.peek();
        System.out.println("栈顶元素:"+peek);

        //栈中所有数据依次出栈并打印
        int len=stack.size();
        for(int i=0;i<len;i++){
            System.out.println("出栈的元素:"+stack.pop());
        }

        //出完了之后打印,里面为空
        System.out.println(stack);
    }
}

stack=[]
入栈的元素为:22
栈中的元素有:[22]
入栈的元素为:33
栈中的元素有:[22, 33]
入栈的元素为:44
栈中的元素有:[22, 33, 44]
入栈的元素为:55
栈中的元素有:[22, 33, 44, 55]
栈顶元素:55
出栈的元素:55
出栈的元素:44
出栈的元素:33
出栈的元素:22
[]

Process finished with exit code 0

五、Queue集合

是Collection集合的子集合,与List集合属于平级
Queue集合的主要描述先进先出特征的数据结构,叫做队列
该集合的主要实现类是LinkedList类

1、常用的方法

在这里插入图片描述

2、代码展示

package com.company.listp;
import java.util.Queue;
import java.util.LinkedList;
public class QueueDemo {
    public static void main(String[] args) {
        //1.
        Queue queue = new LinkedList();

        //2.元素放入队列中
        for (int i = 1; i < 6; i++) {
            boolean offer = queue.offer(i * 11);
            System.out.println("queue队列中元素有:" + queue);
        }

        //3.查看队列首位元素
        System.out.println("队列首位元素:"+ queue.peek());//11

        //4.队列数据出队
        int len = queue.size();
        for (int i = 1; i <= len; i++) {
            System.out.println("出队元素:"+ queue.poll());

        }

        //5,队列中元素
        System.out.println(queue);//[]
    }
}


queue队列中元素有:[11]
queue队列中元素有:[11, 22]
queue队列中元素有:[11, 22, 33]
queue队列中元素有:[11, 22, 33, 44]
queue队列中元素有:[11, 22, 33, 44, 55]
队列首位元素:11
出队元素:11
出队元素:22
出队元素:33
出队元素:44
出队元素:55
[]

Process finished with exit code 0

六、Map集合

1、基本概念

Map<K,V>集合基本单位是:单对元素
K - 维护的键(Key)的类型,相当于目录
V - 映射值(Value)的类型,相当于内容
key不允许重复
一个key只能对应一个value

Map集合的主要实现类有:HashMap类、TreeMap类、LinkedHashMap类、Hashtable类、Properties类
在这里插入图片描述

2、常用方法

在这里插入图片描述

3、代码展示

package com.company.mapp;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo {
    public static void main(String[] args) {
        Map<String, String> m1 = new HashMap<>();
        System.out.println("m1:" + m1); //{}

        //put
        String p = m1.put("qwe", "ert");
        System.out.println("p:" + p); //null
        System.out.println("m1:" + m1); //m1:{qwe=ert}

        p = m1.put("asd", "zxcz");
        System.out.println("p:" + p); //null
        System.out.println("m1:" + m1); //m1:{asd=zxcz, qwe=ert}

        System.out.println(m1.get("asd"));  //zxcz

        boolean containsKey = m1.containsKey("1");
        System.out.println("是否包含:" + containsKey);  //是否包含:false

        containsKey = m1.containsKey("asd");
        System.out.println("是否包含:" + containsKey);  //是否包含:true

        boolean containsValue = m1.containsValue("1");
        System.out.println("是否包含:" + containsValue);  //是否包含:false

        containsValue = m1.containsValue("ert");
        System.out.println("是否包含:" + containsValue);  //是否包含:true

        String s = m1.get("asd");
        System.out.println("获取元素:" + s);   //获取元素:zxcz

        s = m1.get("123123");
        System.out.println("获取元素:" + s);  //获取元素:null

        String r = m1.remove("asd");
        System.out.println("删除的value为:" + r);  //删除的value为:zxcz
        System.out.println("m1为:" + m1);    //m1为:{qwe=ert}

        Set<String> keyset = m1.keySet();
        m1.put("ppp", "rrr");
        System.out.println("set集合为:" + keyset);    //set集合为:[ppp, qwe]

        //获取键值对
        Set<Map.Entry<String, String>> entries = m1.entrySet();
        for (Map.Entry<String, String> map : entries) {
            System.out.println(map);        //ppp=rrr  qwe=ert
        }


    }
}

执行结果

m1:{}
p:null
m1:{qwe=ert}
p:null
m1:{asd=zxcz, qwe=ert}
zxcz
是否包含:false
是否包含:true
是否包含:false
是否包含:true
获取元素:zxcz
获取元素:null
删除的value为:zxcz
m1为:{qwe=ert}
set集合为:[ppp, qwe]
ppp=rrr
qwe=ert

Process finished with exit code 0

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

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

相关文章

C语言中 printf函数格式化输出

一. 简介 本文来简单学习一下&#xff0c;C语言中printf函数格式化输出时&#xff0c;因为我们的粗心没有 将数据类型与格式化参数对应&#xff0c;而导致的一些问题。 二. C语言中printf函数的格式化输出 在C语言中&#xff0c;printf函数是用于格式化输出的函数&#xff0…

如何实现一个AI聊天功能

最近公司的网站上需要对接一个AI聊天功能&#xff0c;领导把这个任务分给了我&#xff0c;从最初的调研&#xff0c;学习&#xff0c;中间也踩过一些坑&#xff0c;碰到过问题&#xff0c;但最后对接成功&#xff0c;还是挺有成就感的&#xff0c;今天把这个历程和项目整理一下…

揭秘:为啥赚钱越来越难了?8大残酷真相!

当下&#xff0c;许多人都普遍感受到了一种前所未有的压力&#xff1a;赚钱似乎变得越来越难了。这一现象的背后&#xff0c;隐藏着多个层面的复杂原因。以下&#xff0c;我们将结合最新的数据和观察&#xff0c;从几个关键角度探讨这一现象的成因。 首先&#xff0c;全球经济…

flinksql 回撤流中主键发生变更的影响(group by中的值发生改变)

flinksql 回撤流中,主键发生变更的影响 1 什么是回撤流2 主键变更场景3 实践中发现的比较好的的实时数仓架构1 什么是回撤流 这篇文章主要谈论一个场景,简单来说: 首先我们来简单的说一下什么是回撤流,以及回撤流的底层原理,举个例子: 这个说的不是很清晰 ,其实倒数第…

Java学习19-List、set容器

目录 一.List&#xff1a; 1.List基本介绍&#xff1a; 2.List接口方法&#xff1a; 3.List的三种遍历方式&#xff1a; 4.ArrayList&#xff1a; &#xff08;1&#xff09;ArrayLis的基本介绍&#xff1a; &#xff08;2&#xff09;ArrayList底层结构和源码分析&…

就业班 第四阶段(docker) 2401--5.29 day3 Dockerfile+前后段项目若依ruoyi

通过Dockerfile创建镜像 Docker 提供了一种更便捷的方式&#xff0c;叫作 Dockerfile docker build命令用于根据给定的Dockerfile构建Docker镜像。docker build语法&#xff1a; # docker build [OPTIONS] <PATH | URL | ->1. 常用选项说明 --build-arg&#xff0c;设…

数学建模 —— 数学规划模型(5)

目录 一、数学规划 1.1 数学规划问题一般形式 二、常见规划模型 2.1 线性规划&#xff08;Linear Programming&#xff09; 2.1.1 定义 2.1.2 一般形式 2.1.3 标准形式 2.1.4 求解 2.2 整数规划&#xff08;Integer Programming&#xff09; 2.2.1 单目标规划 2.…

跨域请求解决方法----不允许有多个 ‘Access-Control-Allow-Origin‘ CORS 头

后端配置了代码&#xff1a; spring:application:name: spzx-server-gatewaycloud:nacos:discovery:server-addr: localhost:8848gateway:discovery:locator:enabled: trueglobalcors:cors-configurations:[/**]:allowedOriginPatterns: "*"# 允许请求中携带的头信息…

每日刷题——杭电2156.分数矩阵和杭电2024.C语言合法标识符

杭电2156.分数矩阵 原题链接&#xff1a;Problem - 2156 题目描述 Problem Description&#xff1a;我们定义如下矩阵: 1/1 1/2 1/3 1/2 1/1 1/2 1/3 1/2 1/1 矩阵对角线上的元素始终是1/1&#xff0c;对角线两边分数的分母逐个递增。请求出这个矩阵的总和。 Input&#xf…

zibll-V7.7最新版2024完美破解授权可用(含授权教程)

最近这个正版安装包流出来了,试了一下用以前的绕过授权方法&#xff0c;一样可以授权。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89379057 更多资源下载&#xff1a;关注我。

基于标准库的STM32的外部中断EXTI

毕设已经告一段落了&#xff0c;接下来准备开始整理一下毕设中用到的知识与技术细节&#xff0c;今天整理的是STM32从编码器获取数据的方式-----外部中断&#xff08;EXTI&#xff09;&#xff1a; 外部中断分为四个硬件相关外设&#xff0c;GPIO/AFIO/EXTI/NVIC&#xff08;E…

天润融通:大模型与生成式AI的融合,开辟零售增长新路径

大模型时代&#xff0c;零售消费企业如何用数智化出奇制胜。 近期&#xff0c;由国内领先的科技产业资本研究平台第一新声举办的“2024年中国CIO数字策略大会”在上海隆重举行。 天润融通消费零售行业顾问颜欣欣先生受邀参与此次大会&#xff0c;并发表了《大模型实践分享:基…

RabbitMQ一、RabbitMQ的介绍与安装(docker)

一、RabbitMQ相关名词解释 MQ MQ全称Message Queue&#xff08;消息队列&#xff09;&#xff0c;是在消息的传输过程中保存消息的容器。 多用于系统之间的异步通信。 常见的两种通信方式&#xff1a; 同步通信&#xff1a;同步通信相当于两个人当面对话&#xff0c;你一言我…

神经网络算法详解与前沿探索

神经网络算法详解与前沿探索 随着人工智能技术的迅猛发展&#xff0c;神经网络成为机器学习领域的重要组成部分&#xff0c;广泛应用于图像识别、自然语言处理和推荐系统等。本文将详细探讨神经网络的基本原理、结构、训练过程及其应用实例&#xff0c;并扩展至更多相关领域和…

虚拟机ubuntu中docker容器端口无法转发可能的一个问题

今天发现一个奇怪的问题。 在vmware里面的Ubuntu虚拟机&#xff0c;不知道为啥docker转发一直不成功。 看了半天&#xff0c;无论是docker ps的进程状态&#xff0c;netstat的端口状态&#xff0c;和iptables的转发链接都是没问题了。 然后我就ifconfig看了一下虚拟机的Ip&…

第四范式Q1业务进展:驰而不息 用科技锻造不朽价值

5月28日&#xff0c;第四范式发布今年前三个月的核心业务进展&#xff0c;公司坚持科技创新&#xff0c;业务稳步拓展&#xff0c;用人工智能为千行万业贡献价值。 今年前三个月&#xff0c;公司总收入人民币8.3亿元&#xff0c;同比增长28.5%&#xff0c;毛利润人民币3.4亿元&…

Python | Leetcode Python题解之第126题单词接龙II

题目&#xff1a; 题解&#xff1a; class Solution:def findLadders(self, beginWord: str, endWord: str, wordList: List[str]) -> List[List[str]]:ans []if endWord not in wordList:return anssize len(beginWord)cur_word_set {beginWord}ws set(wordList)# 用于…

Apache Superset:数据可视化的现代开源解决方案

Superset&#xff1a; 洞察数据&#xff0c;一目了然- 精选真开源&#xff0c;释放新价值。 概览 Apache Superset 是一个由 Apache 软件基金会支持的开源数据可视化和数据探索平台。它允许用户以直观的方式构建丰富的数据报告和仪表板&#xff0c;支持从多种数据源中提取数据…

Houdini的PythonScript基本使用

前言 Houdini内置了Python脚本和相应的编辑器, 很多时候想灵活的制作各种Houdini工具, 基本是必须用到 Python。Houdini官方的python提供了非常完善的接口, 比如可以创建各种节点&#xff0c;连接各种节点&#xff0c;遍历节点各种数据&#xff0c;遍历节点参数等等。 Houdin…

Ubuntu server 24 (linux) 安装 ClamAV 防病毒软件 配置和使用教程

一 ClamAV是一个开源的防病毒引擎&#xff0c;用于检测木马&#xff0c;病毒&#xff0c;恶意软件和其他 恶意威胁。 官网地址 二 安装 1 开始安装 sudo apt update sudo apt install clamav clamav-daemon #查看版本 snort$ clamscan -V ClamAV 1.0.5/27292/Fri May 31 …