Java的集合框架

集合的分类

可以分为单列集合和双列集合

单列集合主要有Collection下面的List与Set,其中List最长被用到的是ArrayList与LinkedList以及Vctor三种 Set最常用的是我们的HashSet以及TreeSet linkedHashSet可以使Set有序(插入与输出)

Collection都可以使用迭代器进行迭代

UML 类图如下

双列集合Map是基类

Map集合下常用的有HashMap与ConcurrentHashMap 、TreeMap、以及LinkedHashMap(保证插入的顺序与输出的顺序一致)

类图如下

ArrayList的源码解析

1、无参构造方法第一次构建创建的数组使{} 没有值 长度是0

list第一次添加元素,不管什么时候添加元素都会查看是需要进行扩容

计算所需要的容量第一次默认是数组大小是10

grow()是进行扩容的方法除了第一次默认是10 以后每一次都是扩容1.5倍

如果使用有参构造方法的话每次以后每次扩容1.5倍 不演示调试截图了

  • 代码整理
// 存储数据的集合
transient Object[] elementData; // non-private to simplify nested class access
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
// list集合的add方法
public boolean add(E e) {// size 默认是0 第一次添加传入的参数就是 0+1ensureCapacityInternal(size + 1);  // Increments modCount!!// 确保内部容量没有问题以后 就进行复制操作elementData[size++] = e;return true;
}
// 确保内部的容量可用
private void ensureCapacityInternal(int minCapacity) {ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
}
// 计算容量的方法
private static int calculateCapacity(Object[] elementData, int minCapacity) {if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {// 进入这里说明集合就是初始值 所以看需要的容量的最小值与 默认容量之间那个大 就返回默认容量return Math.max(DEFAULT_CAPACITY, minCapacity);}// 如果前面没有返回说明了 数组已经进行了初始化 就返回现在需要的容量大小return minCapacity;
}
//  确保容量
private void ensureExplicitCapacity(int minCapacity) {modCount++;// overflow-conscious code  如果容量不够就进行扩容 最小的容量都比数组的长度大了 那肯定就是要进行扩容了if (minCapacity - elementData.length > 0)grow(minCapacity);
}
// 扩容方法
private void grow(int minCapacity) {// overflow-conscious code// 先取出原来的数组容量 第一次取就是0int oldCapacity = elementData.length;// 新的数组长度计算 就是 old + old / 2 原来的1.5倍int newCapacity = oldCapacity + (oldCapacity >> 1);// 如果new 计算出来的容量不如要求最小的容量 就把new 容量 重新复制成 minif (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);
}

Java集合 ArrayList 扩容相关推荐

  1. java集合-ArrayList

    java集合 ArrayList Iterable Comparable(排序接口) 项目结构: class Dog implements Comparable<Dog> {private ...

  2. java集合-ArrayList学习笔记

    集合和数组关系? 1)     集合是一种容器,可以存储多个数据. 2)     数组的长度是固定的,集合的长度是可变的. 3)     集合中存储的元素必须为引用类型数据,初始值为NULL Arra ...

  3. Java集合ArrayList

    ArrayList List接口的一个实现类 内部封装了一个长度可变的数组对象 当存入的元素,超过数组长度时,会在内存中,分配一个更大的数组 来存储这些元素,可以看做是一个长度可变的数组 优点 允许通 ...

  4. Java集合—ArrayList底层原理

    原文作者:0 errors 0 warnings 原文地址:用大白话告诉你ArrayList的底层原理 目录 一.数据结构 二.线程安全性 三.继承关系 四.构造方法 五.add()方法 六.扩容机制 ...

  5. Java集合-ArrayList源码解析-JDK1.8

    ◆ ArrayList简介 ◆ ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List, RandomAcc ...

  6. Java 集合 ArrayList 需要知道的几个问题

    问:Arraylist 的动态扩容机制是如何自动增加的?简单说说你理解的流程? 答:当在 ArrayList 中增加一个对象时 Java 会去检查 Arraylist 以确保已存在的数组中有足够的容量 ...

  7. java集合的扩容研究

    当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复制到新的内存上,这无疑使效率大大降低. 加载因 ...

  8. 深入Java集合ArrayList的源码解析

    现在由大恶人付有杰来从增删改查几个角度轻度解析ArrayList的源码 首先ArrayList的底层数据结构非常简单,就是一个数组. 从源码第115行我们可以得出信息,他的默认数组长度是10. /** ...

  9. Java 集合 —— ArrayList 分析

    List 集合的特征: 有序 可以重复 可以随机访问(使用下标 添加,删除,访问) ArrayList 是 List 的实现类,所以 ArrayList 具有 List 的特征 ArrayList 是 ...

最新文章

  1. LVS(9)——为NAT单独增加路由器
  2. 【C语言重点难点精讲】C语言预处理
  3. 解决微信0day上线CobaltStike的几个问题
  4. 设计模式学习总结7 - 行为型2 - Command命令模式
  5. matlab怎么调出来的,如何调出MATLAB内部函数的源程序?
  6. 修改eclipse或者myeclipse的背景颜色(全部的背景颜色)
  7. 服装企业IT管理 应该这样当
  8. GfK十大洞见揭示物联网时代正全面开启
  9. 我的Delphi开发经验谈(本人修改版) 收藏
  10. 从数字艺术品到 NFT
  11. python操作selenium
  12. 华为freelace耳机修整详录
  13. matlab把句子分割成单词_将英语句子单个单词分割存储
  14. 分享程序员面试的7个技巧
  15. week9 day4 CSS网页布局
  16. Python的PIL库中的getpixel方法 putpixel方法
  17. 仿射密码解密(Affine Cipher)
  18. 10w 行级别数据的 Excel 导入,完整优化记录
  19. pip安装及matplotlib安装
  20. APFS分区容器扩容

热门文章

  1. iPhone收不到软件更新解决方法「苹果教程」
  2. 标准IO:fseek/rewind/ftell 文件IO:lseek
  3. 华为荣耀10是Android,华为、荣耀公布升级安卓10.0名单,来看看有没有你的机型吧...
  4. 上古卷轴5java8_【图片】【上古卷轴5】【无心】个人整合版8.0【霜刃伤情吧】_百度贴吧...
  5. Python 画雪花
  6. 不能选择相邻的食物(清雨这个名字取的挺好的哇)
  7. C#上传阿里云OSS工具类AliOSSTool
  8. vnc viewer 登陆进去后黑屏(解决办法)
  9. 清华这个宝塔的基座——“人文日新”一解
  10. 操作系统复习-2.3 进程同步