首页 > 编程语言 >Java基础 —— 集合(一)

Java基础 —— 集合(一)

时间:2024-12-09 16:56:13浏览次数:11  
标签:Java 容量 ArrayList 元素 基础 线程 key 集合

集合(一)

数组和集合的区别

  • 数组是固定长度的数据结构,而集合是动态的数据结构

  • 数组可以包含基本数据类型和对象,集合只能包含对象

  • 数组只能存放同一类型的数据,而集合可以蹲房不同类型的

  • 数组可以直接访问元素,集合需要通过迭代器或其他方法访问元素

集合的分类

 根据上图,可以看出,Java中集合的核心就是collectionmapIteratorCollections是对集合进行操作的工具类,在图中,虚框代表接口或者抽象类,实框是类,实箭头表示继承,虚箭头表示实现;

collection:是集合List、Set、Queue的最基本接口

map:映射表的基础接口

Iterator:迭代器,可以通过迭代器遍历集合中的数据

 集合主要可以分为两类(collectionmap

  • collection:集合List、Set、Queue的最基本接口(单列集合)

    • List:所有元素按照进入先后顺序进行存储,可重复集合,存取顺序一致

      • ArrayList:底层是数组,随机访问,增删慢,查询快,线程不安全

        扩容机制:

        • ArrayList容量为0时,添加元素需要扩容
        1. 无参构造:创建ArrayList后容量为0,添加一个元素后,容量变成10,之后正常扩容(为原来的1.5倍

        2. 传容量构造:参数为0时,创建ArrayList后容量为0,添加一个元素后,容量为1,之后正常扩容

        3. 传列表参数:列表为空时,创建ArrayList后容量为0,添加一个元素后,容量为1,之后正常扩容

        • ArrayList容量大于0,且是满的时,添加元素,正常扩容
      • LinkedList:底层是双向列表,增删快,查询慢,线程不安全

      • Vector:和ArrayList基本一样,但是它线程安全

    • Set:不允许包含重复的值(可以为空,但是只能有一个),无序

      • HashSet:使用哈希表存储元素,无序,其底层包装了一个HashMap去实现,所以查询插入速度较快

        • LinkedHashSet:继承自HashSet类,它增加了一个重要特性,就是元素按照插入顺序进行存储
      • TreeSet:底层是基于TreeMap实现,它支持两种排序:自然排序和定制排序

    • Queue:队列,先进先出

  • Map:映射表的基础接口(双列集合)

    • HashTable:用哈希表实现,不可重复keykey不能为空,效率较低,线程安全

    • HashMap:用哈希表实现,不可重复keykey可以为空,效率较高,线程不安全

      • LinkedHashMap:用哈希表和双向链表实现,按照key的插入顺序存储
    • TreeMap:用红黑树算法实现,默认按照所有的key进行升序排序,也可自定义排序方式

标签:Java,容量,ArrayList,元素,基础,线程,key,集合
From: https://www.cnblogs.com/codyxz/p/18593846

相关文章

  • Linux基础——创建本地yum源目录及同步公网yum源repo目录到本地
    一、检查同步在线yum源repo源所有rpm包的占用大小yumrepolistAppStream-v 二、下载带目录bclinux/el8.2/,下载目录下除iso及index的目录及文件wget-r-np-nH-Riso,index.html*https://mirrors.cmecloud.cn/bclinux/el8.2/不带目录结构下载wget-nd-r-l1-A.rpm......
  • 【CV基础】语义分割任务计算类别权重
    前言 语义分割任务一般都存在样本类别不平衡的问题,采用类别权重来解决这个问题,本文记录类别权重的计算过程。类别权重计算的基本思路 code#20240620:calculateclassweightswithsemanticsegmentationgtimages.importosimportnumpyasnpimportcv2ascvv......
  • Linux基础与进阶 - 命令和文件操作
    [guougo@guoguo-host~]$~ 当前所在目录的名字,会随着用户进入不同目录而改变~ 表示当前用户的家目录(homedirectory)$ 指你所具备的权限$:普通用户#:超级用户,root权限使用sudosu切换到超级用户使用ctrl+d退出root用户。获取当前用户名和主机名#获取当前用......
  • 【opencv基础】resize使用的问题
    前言最近语义分割任务的gt文件resize前后标签数值发生了错误,最后发现是resize函数调用过程中参数调用出现错误,主要是参数顺序,记录之。问题分析源码 结果: 虽然使用最近邻插值,但是resize后和预想的数值不一致,多方分析、调试,最后小伙伴发现是调用函数参数不正确。opencv官......
  • Pytorch 手写数字识别 深度学习基础分享
    本篇是一次内部分享,给项目开发的同事分享什么是深度学习。用最简单的手写数字识别做例子,讲解了大概的原理。手写数字识别展示首先数字识别项目的使用。项目实现过程:训练出模型准备html手写板flask框架搭建简单后端深度学习必备知识介绍机器学习的概念通俗解释机......
  • Python语言基础(四):运算符、基本输入和输出
    前言:在Python的编程世界中,运算符以及基本输入和输出是构建程序的重要组成部分。熟练掌握它们,能让你更自如地编写各类Python程序。本章,我们将深入对其进行探讨,助力你的Python学习进程。在本章中,我们将逐步揭开以下主题的神秘面纱:运算符:学习Python中的算术、比较、逻辑等运算符,......
  • 白骑士的JavaScript教学生态系统篇之现代前端开发流程 5.3.4 持续集成与部署(CI/CD)
            在现代软件开发中,持续集成与持续部署(CI/CD)已经成为提高开发效率、确保软件质量的关键流程。CI/CD不仅能够自动化代码的构建、测试和部署,还能帮助开发团队快速地将新功能和修复发布到生产环境。本文将深入探讨CI/CD的概念、优势、常用工具以及如何在JavaScript......
  • JavaScript 写css的内联样式
    一、使用style属性-直接设置单个CSS属性//获取元素varelement=document.getElementById("myElement");//设置样式element.style.color="red";element.style.backgroundColor="blue";element.style.fontSize="20px";二、使用cssText属性-一次性设......
  • 12月通信基础知识补充1
    看文献过程中不断发现有太多不懂的基础知识,故长期更新这类blog不断补充在这过程中学到的知识。由于这些内容与我的研究方向并不一定强相关,故记录不会很深入请见谅。【通信基础知识补充5】12月通信基础知识补充1一、最大比合并技术概述1.1工作原理1.2MRC的优点1.3MR......
  • 21天掌握javaweb-->第12天:Spring Boot项目优化与安全性
    SpringBoot项目优化与安全性1.SpringBoot性能优化1.1减少依赖项评估项目的依赖项,并确保只引入必要的依赖。较多的依赖项可能会增加启动时间,因为它们需要被扫描和初始化。通过删除不需要的依赖项或仅引入必要的模块,可以减少类路径的扫描和初始化时间。1.2调整自动配置......