位置: IT常识 - 正文

Java集合框架之List(java集合框架主要有)

编辑:rootadmin
1.List集合概要 2.Iterable接口 1.概要 2.重要方法 forEach方法:对Collection集合中的每个对象进行消费 List<Student> list = Stream.generate(() -> new Student("张三", 23)).limit(100).col ... 1.List集合概要

推荐整理分享Java集合框架之List(java集合框架主要有),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:java集合框架是什么,有什么优点,java集合框架是什么?说出一些集合框架的优点,java集合框架主要有,java集合框架结构图,java集合框架是什么?说出一些集合框架的优点,java集合框架是什么,有什么优点,java集合框架结构图,java集合框架是什么,有什么优点,内容如对您有帮助,希望把文章链接给更多的朋友!

2.Iterable接口1.概要Java集合框架之List(java集合框架主要有)

2.重要方法forEach方法:对Collection集合中的每个对象进行消费List<Student> list = Stream.generate(() -> new Student("张三", 23)).limit(100).collect(Collectors.toList());list.forEach(System.out::println);spliterator方法:获取Spliterator迭代器3.Collection接口1.重要方法spliterator():创建Spliteratorstream():创建串行流StreamparallelStream():创建并行流Stream4.RandomAccess接口1.概要

这是一种标识型接口,用于标识某个类具有某种功能特性的接口。

5.Vector1.Vector集合概要

Vector是一个线程安全的集合,其中的大部分方法都加了synchronized关键字。

2.重要变量Vector中重要的变量信息// 集合Vector存放对象的数组protected Object[] elementData;// 集合Vector存储的对象数量protected int elementCount;// elementData数组每次扩容的大小protected int capacityIncrement;3.Vector的扩容操作初始化Vector的扩容操作// 1. 指定了初始化容量和每次扩容时的增量// 则下次扩容为initialCapacity + capacity,依次类推public Vector(int initialCapacity, int capacityIncrement) { super(); if (initialCapacity < 0) throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); this.elementData = new Object[initialCapacity]; this.capacityIncrement = capacityIncrement;}// 2. 指定初始化容量和每次扩容时的增量为0// 则下次扩容为2 * initialCapacitypublic Vector(int initialCapacity) { this(initialCapacity, 0);}// 3.指定初始化容量为10,则下次扩容为20, 40...public Vector() { this(10);}向集合Vector添加对象,elementData数组容量不足时:2倍扩容// minCapacity为期望的elementData数组容量private void grow(int minCapacity) { int oldCapacity = elementData.length; // 客户指定的每次数组扩容大小超过0,则扩容为newCapacity = oldCapacity + capacityIncrement // 否则进行2倍扩容 int newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity); // 确保数组扩容为期望的elementData数组容量 if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); elementData = Arrays.copyOf(elementData, newCapacity);}客户端重新设置Vector的容量时,可能会进行扩容操作public synchronized void setSize(int newSize) { modCount++; // 新容量大于当前Vector集合中的对象数量则进行扩容 if (newSize > elementCount) { ensureCapacityHelper(newSize); } else { for (int i = newSize ; i < elementCount ; i++) { elementData[i] = null; } } elementCount = newSize;}6.ArrayList1.ArrayList概要

ArrayList是一个多线程环境下有些操作不安全的集合

2.ArrayList集合中重要的常量和变量// 默认的初始化数组容量private static final int DEFAULT_CAPACITY = 10;private static final Object[] EMPTY_ELEMENTDATA = {};private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};// 存放集合ArrayList中的对象的数组transient Object[] elementData;// 集合ArrayList中包含的对象数量private int size;3.ArrayList集合的初始化操作// 使用指定的初始化容量进行初始化public ArrayList(int initialCapacity) { if (initialCapacity > 0) { this.elementData = new Object[initialCapacity]; } else if (initialCapacity == 0) { this.elementData = EMPTY_ELEMENTDATA; } else { throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); }}// 构造一个长度为0的ArrayList集合,// 后面使用add方法添加元素会将elementData扩容成长度为10的数组public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}// 根据另一个集合构造ArrayListpublic ArrayList(Collection<? extends E> c) { elementData = c.toArray(); if ((size = elementData.length) != 0) { // c.toArray might (incorrectly) not return Object[] (see 6260652) if (elementData.getClass() != Object[].class) elementData = Arrays.copyOf(elementData, size, Object[].class); } else { // replace with empty array. this.elementData = EMPTY_ELEMENTDATA; }}4.ArrayList的扩容操作扩容:按照1.5倍扩容// minCapacity为期望的数组最低容量(即原数组容量 + 1)private void grow(int minCapacity) { int oldCapacity = elementData.length; // 1.5倍进行扩容 int newCapacity = oldCapacity + (oldCapacity >> 1); // 确保容器达到最低容量10,最低下限 if (newCapacity - minCapacity < 0) newCapacity = minCapacity; // 确保容器的最大容量,最大上限 if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity);}5.ArrayList内部数组的移动操作移动数组元素的操作都是通过System.arraycopy这个本地方法完成。6.ArrayList的删除操作removeIf删除操作removeIf方法中使用BitSet根据相应的位标记需要删除的元素。// size为容器中的元素个数final BitSet removeSet = new BitSet(size);final int size = this.size;for (int i=0; modCount == expectedModCount && i < size; i++) { @SuppressWarnings("unchecked") final E element = (E) elementData[i]; if (filter.test(element)) { // 需要删除的元素标记为1 removeSet.set(i); // 统计需要删除的元素个数 removeCount++; }}7.Vector和ArrayList的对比两者的内部结构都是数组。Vector集合默认采用当前容量的1倍大小进行扩容,且可以指定一个固定的扩容增量;ArrayList再进行扩容操作时会将当前容量增大50%。Vector集合大大部分操作都是线程安全的,但是使用的是synchronized锁,锁的粒度太过粗放,保证线程安全性不推荐使用Vector;ArrayList集合不是线程安全的,在多线程环境下不能使用它。Vector集合在序列化的过程中,当前elementData数组中多余的索引位被序列化,产生不必要的性能消耗;在对ArrayList集合进行序列化时,只会对elementData数组中已使用的索引位进行序列化,未使用的索引位不会被序列化;相对地,在原ArrayList集合中已被序列化的各个数据对象被反序列化成新的ArrayList集合中的数据对象时,新的elementData数组不会产生多余的容量,只有在下一次被要求向该集合中添加数据对象时,才会开始新一轮的扩容操作。7.Stack1.Stack概要

2.Stack和Vector的对比Stack继承自Vector,内部结构都是数组,都存在数组扩容的问题,每次将数组容量增大一倍的方式不灵活。两者都是线程安全的,但是不推荐使用。已经被LinkedBlockingQueue和CopyOnWriteArrayList等替代。两者没有针对序列化过程和反序列化过程进行任何优化,而工作效果相似的ArrayDeque集合、ArrayList集合都对序列化过程的反序列化过程进行了优化。8.LinkedList1.LinkedList集合的继承体系

2.LinkedList中重要的变量LinkedList底层由双向链表实现// 集合LinkedList的对象个数transient int size = 0;// 指向头节点(双向链表的第一个节点)transient Node<E> first;// 指向尾节点(双向链表的最后一个节点)transient Node<E> first;// 双链表节点结构private static class Node<E> { // 节点存储的元素 E item; // 指向下一个节点 Node<E> next; // 指向前一个节点 Node<E> prev;}3.LinkedList集合的添加操作linkFirst(E e):在双链表头部插入一个新节点linkLast(E e):在双链表尾部插入一个新节点linkBefore(E e, Node succ):在指定节点前插入一个新节点4.LinkedList集合的移除操作unlinkFirst(Node f):移除双链表的第一个节点unlinkLast(Node l):移除双链表的最后一个节点unlink(Node x):移除双链表的指定节点5.LinkedList的查找操作查询指定索引位置的节点// 根据索引和集合长度的一半对比,来决定在头部还是尾部开始搜索。Node<E> node(int index) { // assert isElementIndex(index); if (index < (size >> 1)) { Node<E> x = first; for (int i = 0; i < index; i++) x = x.next; return x; } else { Node<E> x = last; for (int i = size - 1; i > index; i--) x = x.prev; return x; }}6.LinkedList和ArrayList的对比基于数组结构的ArrayList的删除和插入操作效率不高,需要考虑数组扩容元素复制、移动数组元素的问题;基于双向链表的LinkedList的插入和修改操作需要考虑查询索引位的节点的时间消耗,如果在靠近双向链表的中间位置插入新的节点,则找到正确的索引位置节点的时间复杂度为o(n)。ArrayList集合支持随机访问,所以查询的效率很高,时间复杂度为O(1);LinkedList集合的查询操作时间复杂度为o(n);
本文链接地址:https://www.jiuchutong.com/zhishi/310309.html 转载请保留说明!

上一篇:phpcms无法上传图片怎么办(上传图片php)

下一篇:vu3中的父子组件通讯(vue3父子组件通信)

  • iphone13横屏设置在哪里(iphone13横屏设置触控不能横屏了)

    iphone13横屏设置在哪里(iphone13横屏设置触控不能横屏了)

  • 微信收款语音提醒怎么开启(微信收款语音提示怎么关闭)

    微信收款语音提醒怎么开启(微信收款语音提示怎么关闭)

  • 计算器m+键怎么用(计算器上的m键怎么用)

    计算器m+键怎么用(计算器上的m键怎么用)

  • 苹果短信特效看不到(苹果短信特效看不了)

    苹果短信特效看不到(苹果短信特效看不了)

  • 抖音被限制分享什么意思(抖音如何发布作品)

    抖音被限制分享什么意思(抖音如何发布作品)

  • iqooneo充电速度(iqooneo3充电速度)

    iqooneo充电速度(iqooneo3充电速度)

  • 好友申请记录突然没了(我的好友申请记录)

    好友申请记录突然没了(我的好友申请记录)

  • 拼多多撤销申请后可以再申请一次吗(拼多多撤销申请上限了,多久恢复)

    拼多多撤销申请后可以再申请一次吗(拼多多撤销申请上限了,多久恢复)

  • 浏览不良网站对手机有什么影响呢(浏览不良网站对个人有什么影响)

    浏览不良网站对手机有什么影响呢(浏览不良网站对个人有什么影响)

  • p30可以当空调遥控器用吗(p30怎么当空调遥控器)

    p30可以当空调遥控器用吗(p30怎么当空调遥控器)

  • qq签名能限制人看吗(qq签名能限制人数吗)

    qq签名能限制人看吗(qq签名能限制人数吗)

  • 抖音能设置禁止合拍吗(抖音能设置禁止关注吗)

    抖音能设置禁止合拍吗(抖音能设置禁止关注吗)

  • 苹果手机降低白点值要不要打开(苹果手机降低白点值调多少)

    苹果手机降低白点值要不要打开(苹果手机降低白点值调多少)

  • 华为mate30pro播放音乐手机震动(华为mate30播放器设置)

    华为mate30pro播放音乐手机震动(华为mate30播放器设置)

  • 用手机找回已删除照片(用手机找回已删除的照片)

    用手机找回已删除照片(用手机找回已删除的照片)

  • 以太网帧最小长度(以太网最小帧长和最大帧长是多少)

    以太网帧最小长度(以太网最小帧长和最大帧长是多少)

  • 苹果11pro max快捷键怎么设置(苹果11pro max快捷菜单)

    苹果11pro max快捷键怎么设置(苹果11pro max快捷菜单)

  • 苹果8p怎么设置拿起亮屏(苹果8p怎么设置手写输入法)

    苹果8p怎么设置拿起亮屏(苹果8p怎么设置手写输入法)

  • breeon怎么取消(breero怎么关闭)

    breeon怎么取消(breero怎么关闭)

  • 抖音直播怎么关闭礼物特效(抖音直播怎么关闭)

    抖音直播怎么关闭礼物特效(抖音直播怎么关闭)

  • 快手b类封号几天能上同城(快手违规b类禁封一天然后就降权了多久账号恢复呢)

    快手b类封号几天能上同城(快手违规b类禁封一天然后就降权了多久账号恢复呢)

  • 苹果6现在还能用吗(苹果6现在还能用微信吗)

    苹果6现在还能用吗(苹果6现在还能用微信吗)

  • 通过手机号可以查到身份证吗(通过手机号可以查快递吗)

    通过手机号可以查到身份证吗(通过手机号可以查快递吗)

  • 收钱码贴纸怎么申请(收钱码贴纸怎么弄)

    收钱码贴纸怎么申请(收钱码贴纸怎么弄)

  • 三星是安卓系统吗(三星是安卓?)

    三星是安卓系统吗(三星是安卓?)

  • 金立gn8002s什么型号(金立gionee gn8002)

    金立gn8002s什么型号(金立gionee gn8002)

  • 360浏览器如何下载视频(360浏览器如何下载图片)

    360浏览器如何下载视频(360浏览器如何下载图片)

  • 2021年Windows下安装GPU版本的Tensorflow和Pytorch(windows2022下载)

    2021年Windows下安装GPU版本的Tensorflow和Pytorch(windows2022下载)

  • 小规模可以申请出口退税吗
  • 计提生产车间工人和车间管理人员工资
  • 小规模季度开票超过30怎么纳税
  • 总公司签合同发票由分公司开可以吗
  • 资产负债表的期初余额是年初余额吗
  • 企业所得税汇算清缴时间
  • 弥补以前年度亏损从哪里取数
  • 劳务与临时工的区别
  • 预售款计入收入吗
  • 企业应收票据贴现给银行所获得的现金计入现金流量表
  • 教育用地转让缴哪些税
  • 供暖的配套费是不是开口费
  • 验资帐户
  • 购买办公用品账务处理
  • 买了两个月社保能用多少医药费
  • 超出发票使用范围
  • 人力资源外包差额计税税率
  • 进口料件和出口成品的关系
  • 机票的进项
  • Win10时间显示到秒
  • win7系统怎样
  • 外贸综合服务企业代办退税
  • 自己怎么做电脑系统
  • php怎么输出汉字
  • 铁杆茉莉的养殖方法
  • 融资租赁怎么做到表外
  • 从午夜穹顶看育空河,加拿大育空道森市 (© Robert Postma/Getty Images)
  • 凯恩kane
  • 税务安全证书不成功什么意思
  • 超级鸽卫星
  • 抖音是如何成功的
  • Node.js安装过程
  • css中清除浮动
  • PHP Ajax JavaScript Json获取天气信息实现代码
  • 设计服务的成本票可以暂估吗
  • 自产自销农产品增值税免税政策
  • 公司垫付的工伤医药费怎么报销
  • mysql将查询结果存到另一个表
  • 应发工资包括岗位工资吗
  • 支付土地补偿款计入什么科目
  • sql server 2005安装失败
  • mysql "too many connections" 错误 之 mysql解决方法
  • 公司固定资产抵押贷款无法偿还
  • 国有集体企业是国企吗
  • mysql分页怎么实现
  • 应付职工薪酬余额方向
  • 减免的企业所得税是否需要征税 税屋
  • 公司借个人款利息产生个人所得税公司可以承担吗
  • 事业单位调整以前年度的费用
  • 关税进口增值税缴纳时间
  • 超期未备案可以投诉么
  • 基本医疗保险费是医保吗
  • 托收承付的承付是指
  • 房地产开发企业增值税税率
  • mysql单表10亿
  • sql server如何查询
  • 安装freebsd
  • win7系统怎么用键盘开机
  • xp系统乱了,怎么恢复
  • win7检测有错误怎么办
  • xp系统怎么设置自动重启
  • 如何设置虚拟内存大小
  • msp sncp
  • 多文件操作
  • linux如何关闭ipv6防火墙
  • python和r语言区别
  • cocos2dx-js
  • shell命令大全shell脚本编程100例
  • shell脚本运行linux命令
  • 如何在unity里设置碰撞体积
  • ssh执行远程命令 参数
  • android studio安装过程中出现的问题
  • python smtp ssl
  • 广州市税务局长
  • 税务暂停办理业务通知
  • 厦门市无纸化税务局官网
  • 物业收取水电费的通知范文
  • 国税局和税务局合并
  • 江苏省税务局电话咨询热线
  • 地税审计税务稽查局职责
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设