• java集合框架



    集合框架
    1.存储基本类型,在Java中要是用包装类型
    ArrayList<Integer> list=new ArrayList<Integer>();
    2.非泛型集合,可以添加任意类型

    ArrayList list=new ArrayList();
    list.add(1);//装箱  程序性能降低  
    list.add("面试");

    1.泛型不用装箱
    2.泛型可以保证类型安全
    ----------------------------------------------------------
    如果这种    个性    是     个别   的话,我宁可不要

    2.集合扩容的原理
    以数组实现。节约空间,但数组有容量限制。超出限制时会增加50%容量,
    用System.arraycopy()复制到新的数组。因此最好能给出数组大小的预估值。
    默认第一次插入元素时创建大小为10的数组。
     /**
         * Default initial(初始化) capacity(容量).
         */
        private static final int DEFAULT_CAPACITY = 10;
        
     /**
         * Constructs an empty list with an initial capacity of ten.
         */
        public ArrayList() {
            this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;

    定义一个集合,默认会初始化10个位置,但是元素个数为0 ,JDK1.6 和JDK 8

    扩容的过程
    1.add方法是时机
    public boolean add(E e) {
    ensureCapacityInternal(size + 1); // Increments modCount!!
    elementData[size++] = e;
    return true;
    }
    ------第一行code
    private void ensureCapacityInternal(int minCapacity) {
    if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
    minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
    }

    ensureExplicitCapacity(minCapacity);
    }

    -----goon

    private void ensureExplicitCapacity(int minCapacity) {
    modCount++;

    // overflow-conscious code
    if (minCapacity - elementData.length > 0)
    grow(minCapacity);
    }
    last goes to grow

    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);
    }

  • 相关阅读:
    洛谷/SPOJ SP3267 题解
    洛谷P3834题解
    洛谷P2607题解
    可持久化0-1Trie树
    反悔贪心
    记录人生第一次面试
    赋值构造函数和赋值运算符
    使用VS2017遇到的一些小问题
    关于C++中extern的简单笔记
    MFC单文档
  • 原文地址:https://www.cnblogs.com/1287758807cjh/p/8540495.html
Copyright © 2020-2023  润新知