java基础之java容器-Collection,Map

java容器

  • java容器分类
    • 一. Collection
      • 1. List
        • ①. ArrayList
        • ② . LinkedList
        • ③ . Vector
      • 2. Queue队列
        • ①. LinkedList
        • ②. PriorityQueue
      • 3. Set集合
        • ①. HashSet
        • ②. TreeSet
    • 二. Map
      • 1. HashMap
      • 2.TreeMap
      • 3. Hashtable

java容器分类

java容器分为两大类,分别是Collection和Map,而Collection是单个元素的集合,又可以分为List,Queue,Set三大类,而Map是用来存储键值对的,又可以分为HashMap和TreeMap两种

以下是java容器的图解:

在这里插入图片描述
粗略解析:
在这里插入图片描述

一. Collection

Collection是一个集合类的接口,他有三种子类型集合,分别是List,Set,Queue

使用场景:
在这里插入图片描述

1. List

List的特点就是所有的元素是可以重复的。 包括三种Arraylist,LinkedList,Vector

①. ArrayList

ArrayList是一个可以动态增长的数组, ArrayList由于底层是使用数组实现的,所以随机访问速度快,插入删除较慢

使用场景:
1.频繁访问列表中的某一个元素。
2.只需要在列表末尾进行添加和删除元素操作。

常用方法:
————————————————
add():添加元素
addAll():将集合中的所有元素添加到ArrayList中
clear():清空元素
contains():判断元素是否在ArrayList中
get():根据索引获取元素
remove():根据索引删除元素
size():返回ArrayList大小
set():根据索引修改元素
————————————————

② . LinkedList

LinkedList是使用双向链表实现的,在列表中插入和删除速度快,但是查找需要遍历整个链表,速度较慢。使用LinkedList可以实现很多队列、栈的数据结构

适用场景:
1.你需要通过循环迭代来访问列表中的某些元素。
2.需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作

常用方法:
————————————————
add():添加元素
addFirst():在头部添加元素
addLast:在尾部添加元素
addAll():将集合中的所有元素添加到LilnkedList中
clear():清空元素
contains():判断元素是否在LilnkedList中
get():根据索引获取元素
getFirst():获取头部元素
getLast():获取尾部元素
remove():根据索引删除元素
removeFirst():删除头部元素
removeLast():删除尾部元素
size():返回LilnkedList大小
set():根据索引修改元素
————————————————

③ . Vector

Vector是一个已经被弃用的类,因为他是线程同步的,而我们平时使用的时候都是非同步的,使用同步的坏处就是会在一个记录上加锁,防止多个程序访问同一条数据导致数据不同步。这样会导致访问速度变慢。

2. Queue队列

队列是一个满足“先进先出”的数据结构,包含两种 LinkedList,PriorityQueue

①. LinkedList

LinkedList提供了方法支持队列操作,并且实现了Queue接口,所以LinkedList是队列的一种实现,可以通过LinkedList向上转型为Queue。

②. PriorityQueue

PriorityQueue是优先级队列

3. Set集合

集合中的元素不可以重复,包含HashSet,TreeSet,HashSet三种实现

①. HashSet

HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
HashSet 允许有 null 值。
HashSet 是无序的,即不会记录插入的顺序。
HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时实现同步对 HashSet 的并发访问。
HashSet 实现了 Set 接口。

常用方法
————————————————
add():添加元素
addAll():将集合中的所有元素添加到HashSet中
clear():清空元素
contains():判断元素是否在HashSet中
remove():根据索引删除元素
size():返回HashSet大小
————————————————

②. TreeSet

TreeSet底层使用的是红黑树。

二. Map

Map是使用键值对存储的一种结构,有HashMap,TreeMap,Hashtable三种集合实现

Map集合的特点:
1.Map是一个双列集合,一个元素包含两个值(一个key,一个value)

2.Map集合中的元素,key和value的数据类型可以相同,也可以不同

3.Map中的元素,key不允许重复,value可以重复

4.Map里的key和value是一一对应的。

HashMap和Hashtable的区别:
在这里插入图片描述

1. HashMap

HashMap更适合查找、删除、插入。
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
HashMap 是无序的,即不会记录插入的顺序。
HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。

常用方法
————————————————
clear():清空HashMap
size():获取大小
put():添加键值对
putAll():将所有键值对添加到HashMap中
containKey():是否包含key
containValue():是否包含value
get():根据key获取value
keySet():获取key的集合
values():获取所有value
————————————————

2.TreeMap

TreeMap更适合遍历,最大的特点是遍历时是有顺序的,根据key的排序规则来
TreeMap是一个基于key有序的key value散列表。
map根据其键的自然顺序排序,或者根据map创建时提供的Comparator排序
不是线程安全的
key 不可以存入null
底层是基于红黑树实现的

3. Hashtable

Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射
Hashtable:底层也是哈希表,是同步的,是一个单线程结合,是线程安全的集合,速度慢

Hashtable:不能存储null键,null值

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

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

相关文章

VMWare下建的CentOS7 扩容

记录一下扩容过程中踩过的坑 背景:一年半以前私有化部署了一个gitLab服务,当时只分配了30G的磁盘容量,这两天小伙伴总是反馈gitLab登不上。排查发现是因为磁盘满了 然后就开始了磁盘扩容之旅 各种 vgs\pv\pvdisplay\lv\lvm 等等都没用 一下…

ChatGPT记忆功能终于上线了, OpenAI 官方:用得越久越聪明!

原文 ChatGPT记忆功能终于上线了, OpenAI 官方:用得越久越聪明! Aitrainee | 公众号:AI进修生 🌟 记得今年2月份OpenAI发布过ChatGPT上线记忆功能的消息,我记得当时还弹出过这个窗口给我,但是仅仅体验了几…

【书生浦语第二期实战营学习笔记作业(六)】

课程文档:https://github.com/InternLM/Tutorial/tree/camp2/agent 课程作业:https://github.com/InternLM/Tutorial/blob/camp2/agent/homework.md Lagent & AgentLego 智能体应用搭建 1、Agent 理论1.1 为什么要有智能体1.2 什么是智能体1.3 智能体…

【兼职宝典】七大靠谱手机兼职副业平台,让你乐在其中,轻松实现财务自由!

数字化时代已经到来,互联网的普及与技术的飞速发展让越来越多的人开始关注兼职工作,以此增加收入、锻炼能力或追求兴趣爱好。本文将为您详细解读几种热门的兼职方式,助您找到最适合自己的兼职岗位。 一,自媒体运营:创…

Java 循环语句

文章目录 Java 循环语句一,for 循环1. for 循环结构2. for 循环案例: 输出5行HelloWord3. for 循环案例: 写出输出的结果 (格式多样性)4. for 循环案例: 遍历100以内的偶数。并获取偶数的个数,获取所有的偶数的和5. for 循环案例: 输出所有的水仙花数6. …

Jmeter中http请求时加HTTP Cookie管理器,cookie不生效问题

只是想加个cookie,就新建了cookie管理器,用的都是默认的,然后跑到怀疑自己的jmeter是不是出问题了。 还好没卸载重装。只是把策略改成netscape就好了。

【代码随想录刷题记录】LeetCode844比较含退格的字符

题目地址 1. 思路 1.1 基本思路 拿到这个题,我们要单独写一个函数去将退格后的字符串结果返回出来(生成退格后的真实的字符串),我还是想魔改 O ( n ) O(n) O(n)时间复杂度的删除数组元素的算法:【代码随想录刷题记录…

GoLand 2021.1.3 下载与安装

当前环境:Windows 8.1 x64 1 浏览器打开网站 https://www.jetbrains.com/go/download/other.html 找到 2021.1.3 版本。 2 解压 goland-2021.1.3.win.zip 到 goland-2021.1.3.win。 3 打开 bin 目录下的 goland64.exe,选择 Evaluate for free -- Evalu…

RunnerGo四月更新:强化UI自动化测试与UI录制插件功能

RunnerGo最近更新的 UI自动化测试和UI录制插件可以让测试人员更高效地布置UI自动化场景。这次优化升级的插件录制能力,可以更准确的定位元素并执行步骤,并增加了局部截图功能,准确查看定位的元素位置等。 UI插件V2.0介绍 接下来,让…

vue2左侧菜单栏收缩展开功能

目录 1. Main.vue页面代码 a. 修改侧边栏属性 b. 修改头部导航栏 c. 定义我们的变量 d. collapse函数 2. Header.vue页面代码 3. Aside.vue页面代码 vue2左侧菜单栏收缩展开目前是非常常见的,我们在日常开发过程中经常会碰到。这一小节我们就详细了解一下这个…

java多功能手机

随着科技的发展,手机的使用已经普及到每个家庭甚至个人,手机的属性越来越强大,功能也越来越多,因此人们在生活中越来越依赖于手机。 任务要求,使用所学知识编写一个手机属性及功能分析程序设计,测试各个手机…

3步教你成为微信客户管理高手,助你事半功倍!

在如今的商业世界中,与客户建立良好的关系并提供个性化的服务已成为企业成功的关键。今天就 分享三个简单的步骤,让大家成为微信客户管理的高手,事半功倍! 第一步:客户分类与精细化服务 为了更好地管理客户&#xff…

--菱形继承--

#include<iostream> using namespace std;class Animal { public:Animal(){m_Age 0;}int m_Age; };//利用虚继承 解决菱形继承的问题 //继承之前 加上关键字 virtual 变为虚继承 // Animal类称为 虚基类 //羊类 class Sheep:virtual public Animal { public:};//驼类 cl…

力扣数据库题库学习(4.28日)--1581.进店却未进行过交易的顾客

1581. 进店却未进行过交易的顾客 问题链接 思路分析 有一些顾客可能光顾了购物中心但没有进行交易。请你编写一个解决方案&#xff0c;来查找这些顾客的 ID &#xff0c;以及他们只光顾不交易的次数。返回以 任何顺序 排序的结果表。 要求&#xff1a; 获取只浏览不消费的…

idea 的使用和安装 以及简介

Java开发工具 大家刚才写代码的时候都是用记事本写的&#xff0c;但是有没有觉得记事本写代码不太方便啊&#xff01;记事本写代码单词写错了没有提示&#xff0c;格式也不好调整&#xff0c;写代码之后还需要我们到命令行使用javac命令手动编译&#xff0c;然后运行。 有没有一…

春秋云镜 CVE-2023-50564

靶标介绍&#xff1a; Pluck-CMS v4.7.18 中的 /inc/modules_install.php 组件&#xff0c;攻击者可以通过上传一个精心制作的 ZIP 文件来执行任意代码。 开启靶场&#xff1a; 1、点击 admin 进入登录界面 2、使用Burp爆破出登录密码为&#xff1a;admin123&#xff0c;使用…

BIM为电力、供水和道路工程无缝集成,助力智慧城市计划

在道路和公用事业工程中利用 Bentley Open 系列应用程序&#xff0c;项目进度加快 10%&#xff0c;节省成本 1,000 万印度卢比 推动基础设施现代化&#xff0c;实现智慧城市愿景 Dholera特别投资区位于印度艾哈迈达巴德西南 100 公里处&#xff0c;毗邻古吉拉特邦的贸易中心&a…

Bert基础(十八)--Bert实战:NER命名实体识别

1、命名实体识别介绍 1.1 简介 命名实体识别&#xff08;NER&#xff09;是自然语言处理&#xff08;NLP&#xff09;中的一项关键技术&#xff0c;它的目标是从文本中识别出具有特定意义或指代性强的实体&#xff0c;并对这些实体进行分类。这些实体通常包括人名、地名、组织…

新闻 | 电子系协同智能中心与昌平区未来高教园及多所高校开展交流,共话智能无人平台建设

2024年4月8日&#xff0c;清华大学电子工程系在北京昌平两岸共盈科技产业园电子系地空协同智能无人平台基地成功举办“美团杯”智能无人机挑战赛&#xff0c;清华大学电子系党委书记沈渊、昌平区未来城管委会校城融合处处长熊玉川、清华大学团委副书记黄峰等出席。此外来自昌平…

【面经】汇总

面经 Java基础集合都有哪些面向对象的三大特点ArrayList和LinkedList的区别&#xff1f;ArrayList底层扩容是怎么实现的&#xff1f;讲一讲HashMap、以及put方法的过程讲一讲HashMap的扩容过程Hashmap为什么要用红黑树而不用其他的树&#xff1f;Java8新特性有哪些LoadFactor负…