当前位置: 首页 > news >正文

Java集合框架----集合

# Java集合框架----集合

## 集合

### 什么是集合

- 对象的容器,定义了多个对象进行操作的常用方法。可实现数组的功能

### 和数组的区别

1. 数组长度固定,集合长度不固定
2. 数组可以存储基本类型和引用类型,集合只能存储引用类型
3. 使用java.util.*

## Collection集合体系

![image-20230117230148823](C:\Users\13481\AppData\Roaming\Typora\typora-user-images\image-20230117230148823.png)

### Collection父接口

- 特点:代表一组任意类型的对象,无序、无下标、不能重复
- ![image-20230117230430506](C:\Users\13481\AppData\Roaming\Typora\typora-user-images\image-20230117230430506.png)

### List子接口

- 特点:**有序、有下表、元素可以重复**
- ![image-20230117233957917](C:\Users\13481\AppData\Roaming\Typora\typora-user-images\image-20230117233957917.png)

- 使用List进行添加基本类型的数据的时候,会有一个基本装箱的操作,因为List是不能直接添加基本类型的数据的

### List实现类

![image-20230118121845751](C:\Users\13481\AppData\Roaming\Typora\typora-user-images\image-20230118121845751.png)

- ArrayList:

  - 源码分析:

    - 默认容量:DEFAULT_CAPACITY = 10
      - 注意:**如果没有向集合中添加任何元素,它的默认长度为0**
      - **添加一个元素之后容量就变成了10,**
      - 如果满了就会继续扩容,**扩容之后每次都是原来的1.5倍**
    - 存放元素的数组 elementData
    - 实际元素个数 size 
    - 添加元素 add()

    ```java
    public boolean add(E e) {
            ensureCapacityInternal(size + 1);  // Increments modCount!!
            elementData[size++] = e;
            return true;
        }
    ```

    ```java
    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
            int oldCapacity = elementData.length;
            int newCapacity = oldCapacity + (oldCapacity >> 1);
            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);
        }
    ```

    

- Vector:现在使用较少

- LinkedList:

- ArrayList与LinkedList的区别

  - ![image-20230118205348069](C:\Users\13481\AppData\Roaming\Typora\typora-user-images\image-20230118205348069.png)

相关文章:

  • 金桥网站建设/seo学院培训班
  • 桂林网站制作/网站优化公司怎么选
  • 上海网络公司网站/凡科网怎么建网站
  • 网站第三方登录怎么做/百度权重4网站值多少钱
  • 加强网站建设 基本措施/网站seo外链建设
  • 网站规划的原则有哪些/网络优化报告
  • [论文阅读] (26) 基于Excel可视化分析的论文实验图表绘制总结——以电影市场为例
  • JavaScript - 代理与反射(代理模式 + 小结)
  • Spring 之 @Cacheable 缓存使用教程
  • 在线教育-谷粒学院学习笔记(八)
  • Webpack学习笔记
  • 如何用C++扩展NodeJS的能力?
  • posix API与网络协议栈
  • 2023-1-18刷题情况
  • 毕业论文查重
  • uni-app 中实现文件和图片的上传-H5
  • OpenDDS开发人员指南中文版3.23
  • 用友BIP与旺店通·企业奇门对接集成采购订单列表查询=>创建采购单(采购订单=>采购单)