Java-基础-3.容器

news2024/11/16 7:35:02

一:为什么会出现容器?

  1. 在之前的学习中,我们学习了变量和常量。都是一个字符或者字符串,数字的情况。但是在实际的生产中,我们一次会接受到很多类型不同,个数不同的数据。所以,为了方便我们后续的处理,引进了容器的概念(引入了数组的概念,但是数组扩容比较麻烦,不够灵活)。
  2. 容器-用来存储相同类型,可以随时扩容的对象。

二:容器是是什么?

在这里插入图片描述
1. Collection接口
 (1)Collection是一个接口,只是规定了一些方法,即作为一个容器就应该具有这些功能。

2. list接口
特点
  有序,可以重复
ArrayList
 (1)底层构成是由数组组成。
 (2)扩容
   在插入数据时候,长度进行比较,如果孔家不够,那么就进行扩容,扩容后的大小等于扩容前大小的1.5倍。扩容比较麻烦,需要重新进行排序
LinkedList
 (1)底层由双向链表构成(之所以不是单向列表,方便前遍历)first,last。
 (2)扩容
   扩容比较简单,将插入位置的前后俩个数组的链条指向修改即可。
在这里插入图片描述
对比
  1. ArrayList对于对于查询方便。因为由索引的存在,对于增加和修改,删除比较繁琐。
  2. LinkedList对于查询繁琐,因为需要挨个进行遍历,对于增加和修改,删除简单。
3. Map接口
HashMap
 (1)主要存储键值对<key,value>值。
 (1)底层构成。
   底层是由数组,单向链表以及红黑树构成。
在这里插入图片描述
 (2)扩容。
   数组扩容。默认数组长度是16,当使用了75%的时候,就会进行二倍扩容。
   链表扩容。当链表长度超过8的时候,多余出来的数据就会变成红黑树。

在这里插入图片描述
   红黑树特点:
    1.每个节点要么是红色,要么是黑色。
    2.根节点必须是黑色
    3.红色节点不能连续(红色节点的孩子和父亲都不能都是红色)
    4.从任意节点出发,到其所有叶子节点的简单路径上都包含相同数目的黑色节点.(非常重要)
    5.每个红色节点的两个子节点一定都是黑色(叶子节点包含NULL)
4. Set接口
HashSet
特点 无序,不可以重复。
存储本质 本质上hashSet的底层是HashMap。将数据存储在key中,value值用一个new Object()作为填充。
5. 整体对比
 (1)Set和List是存储相同类型的值的一个容器,Map是存储<key,value>键值对的容器。
 (2)HashSet和HashMap,对于存储的数据是无序,不可以重复的。LinkedList和ArrayList是有序的,可以重复。
 (3)LinkedList 便于增,删,改,不利于查。ArrayList便于查,不便于增,删,改。

三:容器怎么使用?

 (1)容器包含的方法(除Map)。
    添加 add
    删除 remove
    记数 size
    包含 contains
    清空 clear
    是否空 isEmpty
 (2)map。
    Object put(Object key, Object value);
    Object get(Object key);
    Object remove(Object key);
    boolean containsKey(Object key);
    boolean containsValue(Object value);
    int size();
    boolean isEmpty();
    void putAll(Map t);
    void clear();
 (3)迭代器(Iterator)
    boolean hasNext(); //判断是否有元素没有被遍历
     Object next(); //返回游标当前位置的元素并将游标移动到下一个位置
     void remove(); //删除游标左面的元素,在执行完next之后该 ,操作只能执行一次。
    本质上是一个指针对象,当我们在方法中,使用到迭代器,想要指定当前的元素,我们需要使用next()来指向当前的元素;
 (4)迭代器(Iterator)(Map)

package day02;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class HashMap_test {
    public static void main(String[] args) {
        HashMap<Integer, String> map = new HashMap<>();
        map.put(1,"op");
        map.put(2,"op");
        map.put(3,"io");
        map.put(3,"io");
        System.out.println(map.size());
        System.out.println(map.get(3));

        Set<Integer> integers = map.keySet();
        Iterator<Integer> iterator = integers.iterator();
        while (iterator.hasNext())
        {
            Integer next = iterator.next();
            System.out.println(next+"-"+map.get(next));
        }
    }
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

红杉:2022企业数字化年度指南

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年12月份热门报告盘点罗振宇2023年跨年演讲PPT原稿吴晓波2022年年终秀演讲PPT原稿2023年&#xff0c;如何科学制定年度规划&#xff1f;《底层逻辑》高清配图华为2021数字…

[基础语法] python语法之列表的基本操作

文章目录列表已发布列表的基本操作增删改查排序列表实例练习列表 已发布 python判断语句python循环语句python之列表list python 的数据格式主要有列表、字典、元组、集合。其中列表的使用最为广泛。 任何一种数据格式的使用都离不开增、删、改、查四个操作。列表除了这四个…

【Mysql第四期 运算符规则计算】

文章目录写在前面1.算数运算符2.比较运算符3.逻辑运算符4.位运算符5.运算符的优先级拓展&#xff1a;使用正则表达式查询写在前面 基本的运算符号在计算机编程领域都是相通的&#xff0c;会有自己的一些特定符号语言&#xff0c;就像是各地的普通话一样&#xff0c;尽管语音描…

剑指 Offer II 004只出现一次的数字

给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 示例 1&#xff1a; 输入&#xff1a;nums [2,2,3,2] 输出&#xff1a;3 示例 2&#xff1a; 输入&#xff1a;nums [0,1,0,…

Linux中Vi编辑器和Vim编辑器

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

Docker常用命令总结

基础命令 1.启动docker systemctl start docker 2.关闭docker systemctl stop docker 3.设置docker为自启动 systemctl enable --now docker 4.重启docker systemctl restart docker 3.查看docker版本信息 docker version 4.查看docker详细信息 docker info Clien…

Spring定时器超过30分钟问题

目前需要定时器做一个定时扫描任务的功能&#xff0c;原先都是定时在半个小时&#xff0c;程序跑起来也没事。但是最近公司要求定时时间加长到45分钟&#xff0c;而调整完配置完后发现&#xff0c;程序是在45分钟和整点进行的扫描。 下面是我做的示例时间缩短为45秒 spring。x…

守护进程编程流程及代码实现

概念不做阐述&#xff0c;本文主要内容为守护进程编程部分的知识说明 守护进程的编程流程&#xff1a; 1.fork退出父进程&#xff0c;保证留下的子进程是组员进程 2.利用setsid()创建新会话&#xff0c;把子进程挪到新的会话中 //获取会话是getsid() 3.fork退出父进程&#x…

完成基于Servlet的对user表的增删改查

基于Servlet的增删改查 1.开发环境 IDEAJDK1.8Tomcat8.5Mysql 8.0.12 2.数据库 2.1表创建 2.2表数据 3.JavaWeb代码 3.1目录结构 3.2util包下代码 JdbcUtil完成对数据库的连接和资源释放 JsonResult对返回前端资源的封装 JdbcUtil代码&#xff1a; /* 数据库连接板帮助类 …

Python中的垃圾回收机制

Python的垃圾回收主要以引用计数为主&#xff0c;分代回收为辅。引用计数在Python中&#xff0c;使用了引用计数这一技术实现内存管理。一个对象被创建完成后就有一个变量指向这个对象&#xff0c;那么就这个对象的引用计数为1&#xff0c;以后如果有其他变量指向这个对象&…

不吹牛,完爆ant design的定位组件,floating-ui来也

前言 因为要写react定位组件&#xff08;这不是标题党&#xff0c;就是完爆ant design的定位组件&#xff0c;你应该看到一半就会同意我的观点&#xff09;&#xff0c;如下图&#xff1a; 红框部分是用绝对定位放在按钮上面的&#xff0c;你们B端用的主流组件库都是这样实现的…

Python自动化小技巧14——自动批量发送邮件(带各种附件)

案例背景 我的博客下面评论都是各种要数据的......一个一个发其实很浪费时间的&#xff0c;每次输入评论者的邮箱&#xff0c;然后打开数据所在的文件夹&#xff0c;上传&#xff0c;填写标题正文&#xff0c;发送....... 一模一样的流程&#xff0c;所以这种重复性的劳动肯定…

Linux下 git 上传与删除 的基本指令

git的概述克隆仓库使用 git 上传文件删除 git 中的文件git的概述 Git 是一个免费并开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目。 在使用 git 应确保Linux系统中已安装有git 命令&#xff1a;git --version 作用&#xff1a;查看 git 是否…

Spring Boot 单元测试

文章目录1. 单元测试是什么2. 单元测试的优点3. 进行 Spring Boot 单元测试3.1 确认项目中已经内置了测试框架3.2 生成单元测试的类3.3 添加 SpringBootTest 注解3.4 添加单元测试的业务代码3.5 注解 Transactional4. 断言1. 单元测试是什么 单元测试&#xff0c;是指对软件中…

微信小程序022同学会学生会活动经费系统

同学会小程序采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员端和用户端两部分&#xff0c;管理员管理主要功能包括&#xff1a;首页、个人中心、用户管理、共享账本管理、我的账本管理、经费信息管理、经费支出管理、活动信息、管理员管理、留言板管理…

分享怎么做公众号预约_美容院预约小程序开发制作功能介绍

小程序的功能首先是为美人有约客户提供更快选购、预约服务的线上工具&#xff0c;解决顾客对商品详情、线上购买、线上预约查看等各种服务需求。一、美容美发预约下单小程序主要功能有&#xff1a;首页&#xff1a;搜索、banner、金刚区、瓷片区、项目列表预约&#xff1a;单次…

Java技术栈,从入门到放弃,废了废了

Java技术路线应用框架后端Spring家族SpringIoCAOPSpring MVCSpring Boot自动配置、开箱即用整合Web整合数据库&#xff08;事务问题&#xff09;整合权限ShiroSpring Security整合中间件缓存MQRPC框架NIO框架服务器软件应用服务器TomcatJettyUndertowWeb服务器Nginx中间件缓存R…

Deathstalker的核心武器——Janicab新变种

01 概述 DeathStalker是一个专门针对金融机构和律师事务所进行攻击的组织&#xff0c;而Janicab是其所使用的比较古老的武器。 Janicab 首次在2013年被发现&#xff0c;它是能够运行在MacOS和Windows操作系统上的恶意软件。其中&#xff0c;Windows版本基于VBscript的植入作为…

【第27天】SQL进阶-查询优化- performance_schema系列实战三:锁问题排查(表级锁)(SQL 小虚竹)

回城传送–》《32天SQL筑基》 文章目录零、前言一、什么是表级锁二、什么时候适合加表级锁三、实战演练3.1 数据准备&#xff08;如果已有数据可跳过此操作&#xff09;3.2 开启第一个会话&#xff0c;执行显式加表级锁3.3 开启第二个会话&#xff0c;对该表执行update更新3.4 …

Vue 3.0 应用组件实例

#创建一个应用实例 每个 Vue 应用都是通过用 createApp 函数创建一个新的应用实例开始的&#xff1a; const app Vue.createApp({ /* 选项 */ }) 该应用实例是用来在应用中注册“全局”组件的。我们将在后面的指南中详细讨论&#xff0c;简单的例子&#xff1a; const app V…