首页 > 编程语言 >Java集合框架(部分)

Java集合框架(部分)

时间:2023-09-29 22:22:22浏览次数:46  
标签:Java 框架 ArrayList 元素 链表 插入 数组 集合 底层

类图

List:有序可重复集合

特点

1.元素允许重复

2.元素有序(元素的顺序就是插入时的顺序)

3.元素可以通过索引来访问或者设置

{

ArrayLIst:底层为数组,查询速度快,增删慢

LinkedList:底层是链表,查询速度慢,增删快

两者的优缺点,:效率高,线程不安全

}

Set:无序不可重复集合

HashSet:底层为数组,链表,红黑树,元素唯一性依靠重写hashcode()和equals()方法

TreeSet:底层为二叉树,元素唯一且已经排好序,唯一性依靠重写hashcode()和equals()方法

LinkedHashSet:继承HashSet,底层为链表和哈希表,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性

Map:保存具有映射关系的数据,键值对

HashMap:底层为数组,链表,红黑树,使用频率最高的处理键值对的数据类型,根据键的hashcode值存储数据,大多数情况下可以直接定位到它的值,最多允许一个key值为null,多个value值为null

TreeMap:底层为红黑树,实现了SoreMap接口,保存的记录根据键进行排序

LinkedHashMap:继承了HashMap,底层为数组,链表,红黑树,双向链表

 

 

面试问题

1.ArrayList与LinkedList异同

1.线程安全:都不同步,即都不保证线程安全

2.底层数据结构:ArrayList为数组,LinkedLIst为双向循环链表

3.元素位置对插入和删除的影响:ArrayList底层为数组,所以会受到元素位置影响。直接插入删除时,默认将该元素追加到数组末尾,时间复杂度为O(1),但要将元素在指定位置插入删除时(),时间复杂度为O(n-1)。LinkedLIst底层为链表,不受到元素位置影响,近似为O(1)。

4.是否支持快速随机访问:ArrayList实现了RandomAccess接口,所以支持快速访问,LinkedLIst不支持快速随机访问

5.内存空间占用:ArrayList对内存的浪费主要体现在末尾会预留一定的空间,LinkedList主要体现在每个元素都要比ArrayList占用更多空间(后继和前驱)。

2.ArrayLIst的扩容机制?

  ArrayList是基于数组的集合,数组的容量是在定义的时候确定的,如果数组满了,再插入,就会数组溢出。所以在插入时候,会先检查是否需要扩容,如果当前容量+1超过数组长度,就会进行扩容。

ArrayList的扩容是创建一个1.5倍的新数组,然后把原数组的值拷贝过去。

 

 

 

 

 

标签:Java,框架,ArrayList,元素,链表,插入,数组,集合,底层
From: https://www.cnblogs.com/ywzh/p/17736985.html

相关文章

  • java springboot项目,mybatisplus,import com.baomidou.mybatisplus.core.mapper.BaseMa
    <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.2</version><!--用版本2.1.9就不行,UserMapper里BaseMapper爆红--></dependency>我的结果是,......
  • Java面试题之MyBatis
    1.MyBatis中#{}和${}的区别是什么#{}是预编译处理,${}是字符串替换;Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;Mybatis在处理${}时,就是把${}替换成变量的值;使用#{}可以有效的防止SQL注入,提高系统安全性。2.M......
  • 无涯教程-JavaScript - REPLACE函数
    描述REPLACE函数根据您指定的字符数,用不同的文本字符串替换文本字符串的一部分。REPLACEB根据您指定的字节数,用不同的文本字符串替换文本字符串的一部分。REPLACE适用于使用单字节字符集(SBCS)的语言,而REPLACEB适用于使用双字节字符集(DBCS)的语言。您计算机上的默认语言设......
  • Go每日一库之184:katana(新一代爬虫框架)
    项目链接https://github.com/projectdiscovery/katana项目简介katana是一个使用golang编写的新一代爬虫框架,支持HTTP和headless抓取网页信息不仅可以作为库集成到Golang项目,还可以通过命令行直接抓取,对于有一些轻量级的抓取任务的开发者配合jq一起使用简直就是福......
  • Go每日一库之146:bbs-go(bbs框架)
    概要bbs-go是一款基于Go语言研发的开源、前后端分离、精美小巧、跨平台的社区系统。初期该项目仅用过学习和交流,开源之后越来越多的小伙伴儿开始喜欢和关注他,这也是我长期升级和维护的动力。bbs-go为前后端分离设计,后端接口服务使用简洁的Go语言进行开发,前端页面使用Vue.js进......
  • Go每日一库之135:Ent(Facebook 开源 Golang 实体框架)
    对于后端开发者来说,一款好用的框架能够大大提升应用的开发效率。为了降低开发者使用TiDB的门槛,方便开发者快速连接到TiDB,我们也在和合作伙伴一起,逐步完善面向主流开发语言和框架的连接支持。近日,Facebook开源的Golang实体框架Ent完成了对TiDB数据库的支持。Ent是......
  • JavaScript: Data Structures
      //JavaScriptDocument//file:1.js//edit:geovindu,GeovinDu/*varGeovinDu={firstName:"Geovin",lastName:"Du"};varstudent1={id:"12345678",courses:["ProgrammingI","Engli......
  • 《Java编程思想第四版》学习笔记32--关于static字段的序列化
    //:CADState.java//Savingandrestoringthestateofa//pretendCADsystem.importjava.io.*;importjava.util.*;abstractclassShapeimplementsSerializable{publicstaticfinalintRED=1,BLUE=2,GREEN=3;privateintxPos,yPos,dimension;p......
  • 无涯教程-JavaScript - LEN函数
    描述LEN返回文本字符串中的字符数。LENB返回用于表示文本字符串中字符的字节数。仅当将DBCS语言设置为默认语言时,它每个字符计数2个字节。否则,LENB的行为与LEN相同,每个字符计数1个字节。支持DBCS的语言包括日语,中文(简体),中文(繁体)和韩语。语法LEN(text)LENB......
  • 无涯教程-JavaScript - FIND函数
    描述FIND和FINDB在第二个文本字符串中定位一个文本字符串,并从第二个文本字符串的第一个字符返回第一个文本字符串的起始位置的编号。FIND适用于使用单字节字符集(SBCS)的语言,而FINDB适用于使用双字节字符集(DBCS)的语言。您计算机上的默认语言设置会影响返回值,如下所示:......