集合自序整理集

集合和数组一样都是对多个数据进行存储操作的容器

*
– 集合长度可变,数组长度固定
– 集合可以存储不同数据类型元素,数组只能存储单一数据类型元素
– 集合只能存储引用类型元素,数组既可以存储引用类型元素又可以存储基本类型元素

单例集合,它包含了集合的基本操作和属性,它是List接口和Set接口的父接口

Collection接口通用方法来对集合实现基本操作:

    add():添加元素
    clear():清空元素
    remove():删除元素
    size():元素数量
    toArray():集合转数组
    contains():判断元素是否存在
    isEmpry():判断集合是否为空

在Collection中LIst集合是进入先后有序保存可重复的类型,可对其中每个元素的插入位置进行精准地控制,可以通过索引来访问元素和遍历元素;在List集合中我们常使用到的就是ArrayList集合和LinkedList集合这个两个类

List接口定义的特有基本功能:

    set():把索引查询到位置的元素修改成指定的值,并返回修改前的值
    get():获取指定位置的元素
    indexOf():索引指定元素
    listIterator():列表迭代器
    subList():截取集合

ArrayList集合实现List接口,它得到来LIst集合框架的基础功能;ArrayList集合底层是通过数组来实现的,随着元素的增加而动态扩充;

*
优点:查询快、效率高、可以存储重复值
缺点:增删慢、线程不安全

对于ArrayList来说带有尖括号<>则代表泛型,表示着集合当中所有的元素全都是统一的类型,泛型只能是引用类型而不能是基本类型

在ArrayList集合中存储的指定数据结构都是以对象为单位,所有的数据类型都必须转换成包装类

*

+ 自动装箱:基本类型转换成包装类(int => Integer)
+ 自动拆箱:包装类转换成基本类型(Integer => int)

*

+ ArrayList集合之所以和数组有着相似性功能,是因为ArrayList类内部封装类一个Object类型的数组,在ArrayList集合当中会有很多方法,比如index、indexOf都是在内部数组中调用Array对于的方法

*

+ 频繁的往ArrayList中添加和修改元素都会引起装箱和拆箱操作,会存在影响内部Object数组的效率

*

+ 数组扩容,每当ArrayList集合执行add()操作时,内部数组就会自动检查容量是否足够,容量足够则正常添加元素;容量不够时,数组会以自身容量的两倍来创建一个新的数组,将旧数组中数据存入到新数组,再旧数组丢弃掉;对于这个临界点扩容的操作会存在影响一些效率

LinkedList集合实现了LIst、Deque接口,底层是一个双向链表,属于线性表

*
优点:增删快、允许空值存在、线程安全
缺点:查询慢

&#x521B;&#x5EFA;LinkedList&#x65B9;&#x6CD5;
    LinKedList<string>list = new LinKedList<>();
    &#x6DFB;&#x52A0;&#x5230;&#x9996;&#x5217;/&#x6DFB;&#x52A0;&#x5230;&#x672B;&#x5217;/&#x6DFB;&#x52A0;&#x5143;&#x7D20;
    list.addFirst("&#x51B0;&#x58A9;&#x58A9;")
    list.addLast("&#x96EA;&#x5BB9;&#x878D;")
    list.add("&#x674E;&#x900D;&#x9065;")
    list.push("&#x7B49;&#x540C;&#x4E8E;add()")
    &#x5220;&#x9664;&#x9996;&#x5217;&#x5143;&#x7D20;/&#x5220;&#x9664;&#x5143;&#x7D20;
    list.removeFirst("&#x51B0;&#x58A9;&#x58A9;")
    list.removeLast("&#x96EA;&#x5BB9;&#x878D;")
    list.remove("&#x674E;&#x900D;&#x9065;")
    </string>

Map接口提供的是一种映射关系,存储元素是采用键值对方式(key-Value),能根据key快速的查询到Value值

*
– 特点:支持泛型、key值可重复/Value值不可重复

HashMap是Map接口实现类,底层是基于数组+链表(哈希表)实现的;HashMap集合整体就是一个数组,数组每个下标就代表着一个链表,链表节点中Vaule是Object类型

*

+ 优点:无序排列
+ 缺点:线程不安全

&#x521B;&#x5EFA;HashMap&#x65B9;&#x6CD5;&#xFF1A;
    HashMap<string,double>map = new HashMap<string,double>();
    &#x6DFB;&#x52A0;&#x5143;&#x7D20;
    map.put("&#x653F;&#x6CBB;"&#xFF0C;90.0)
    &#x5220;&#x9664;&#x5143;&#x7D20;
    map.remove("&#x653F;&#x6CBB;")
&#x904D;&#x5386;HashMap
for(Map.Entry<string,double>entry:map.entrySet()){
    sout("key:"+entry.getKey+",Value:"+entry.getValue);
}
</string,double></string,double></string,double>

Original: https://www.cnblogs.com/Lokemow/p/LokemowKai_JiHe.html
Author: Lokemow
Title: 集合自序整理集

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/591838/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 彻底解决SLF4J的日志冲突的问题

    今天公司同事上线时发现,有的机器打印了日志,而有的机器则一条日志也没有打。以往都是没有问题的。 因此猜测是这次开发间接引入新的日志jar包,日志冲突导致未打印。 排查代码发现,系统…

    数据库 2023年6月6日
    0225
  • 记录下在阿里云linux上安装与配置Mysql

    环境:阿里云ECS服务器,系统为centos7.2 用户:root 参考博客: https://blog.csdn.net/kunzai6/article/details/8193…

    数据库 2023年6月16日
    0116
  • Volatile的学习

    首先先介绍三个性质 可见性 可见性代表主内存中变量更新,线程中可以及时获得最新的值。 下面例子证明了线程中可见性的问题 由于发现多次执行都要到主内存中取变量,所以会将变量缓存到线程…

    数据库 2023年6月11日
    068
  • Ajax请求下载文件的解决方案

    写这个博客之前我并不清楚 ajax请求是下载不了文件的 😅 这段时间在写一个自己的项目,用到了ajax下载文件,请求到了controller层并返回文件下载成功 但是浏览器就是没有…

    数据库 2023年6月9日
    0247
  • Redis集群(二)哨兵模式

    一、作用和架构 1. 作用 Redis Sentinel,即Redis哨兵,在Redis 2.8版本开始引入。哨兵的核心功能是 主节点的自动故障转移。下面是Redis官方文档对于哨…

    数据库 2023年6月11日
    092
  • html学习笔记

    学完html基本以后,现在对html知识做以下总结: 以上内容来源于bilibiliup狂神说 html html,即超文本标记语言(Hyper Text Markup Langu…

    数据库 2023年6月14日
    089
  • 工厂模式

    工厂模式是java中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一…

    数据库 2023年6月11日
    092
  • Java面向对象程序设计(2)封装,继承和多态

    面向对象的三大特征是:封装,继承和多态 访问修饰符 java 提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围) : 访问级别 访问控制修饰符 同类 同包 …

    数据库 2023年6月16日
    071
  • go context详解

    Context通常被称为上下文,在go中,理解为goroutine的运行状态、现场,存在上下层goroutine context的传递,上层goroutine会把context传递…

    数据库 2023年6月9日
    0108
  • 13 数组有没有 length()方法 String 有没有 length()方法

    数组没有length()方法,有length属性; String有length()方法。 注意:在JavaScript中,获得字符串长度是通过length属性得到的,这一点请不要和…

    数据库 2023年6月6日
    087
  • MySQL索引分类及相关概念辨析

    本文链接:https://www.cnblogs.com/ibigboy/p/16198243.html 之前的一篇《MySQL索引底层数据结构及原理深入分析》很受读者欢迎,成功地…

    数据库 2023年6月11日
    0101
  • MySQL优化之索引解析

    索引的本质 MySQL索引或者说其他关系型数据库的索引的本质就只有一句话, 以空间换时间。 索引的作用 索引关系型数据库为了 加速对表中行数据检索的( 磁盘存储的) 数据结构 索引…

    数据库 2023年5月24日
    096
  • 响应式编程-入门介绍

    概念 与传统编程模型对比 传统编程模型,主要特点是 同步阻塞式-Blocking; 而响应式编程(Reactive Programming) 主要特点是 异步非阻塞 Non-Blo…

    数据库 2023年6月11日
    0113
  • 简单日期格式化的使用

    简单日期格式化的应用 简单日期格式化的使用 面试题: &#x6709;&#x4E00;&#x4E2A;&#x65F6;&#x95F4; 20…

    数据库 2023年6月16日
    075
  • super 和 this 的区别

    一、二者的区别 1.属性的区别:this访问本类中的属性,如果本类没有此属性则从父类中继续查找。super访问父类中的属性。2.方法的区别:this访问本类中的方法,如果本类没有此…

    数据库 2023年6月11日
    086
  • 前端常用函数封装

    常用函数封装 获取某日期若干个工作日后的日期 * &#x53C2;&#x6570;: * time: [String] &#x7ED9;&#x5B9…

    数据库 2023年6月11日
    094
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球