ArrayList源码解读[面试专题](集合相关)

2022-06-14 20:53:23 浏览数 (1)

ArrayLis源码解读 扩容以及缩容

存放元素:有序 线程是否安全:不安全 数据结构:给予数组实现。

代码语言:javascript复制
package com.gtf.xc;

import java.util.ArrayList;
import java.util.Arrays;

public class MyArrayList<T>
{
    Object[] elementData;
    /**
     * 当前存储的元素个数
     */
    int size;
    /**
     * 默认大小为10
     */
    static  final int DEFAULT_SIZE=10;
    public MyArrayList() {

    }
    public  void add(T element) {
        //默认初始化
        if (elementData == null) {
            elementData = new Object[DEFAULT_SIZE];
        }
        //判断是否需要做扩容
        if (size 1> elementData.length){
            //原来的容量
            int oldSize = elementData.length;
            //新的容量 10 10/2
            int newSize = oldSize   (oldSize>>1);
            elementData = Arrays.copyOf(elementData, newSize);
        }
        elementData[size  ] = element;
    }
    public T get(int index){
        return (T) elementData[index];

    }
    public boolean remove(T t){
        for (int i = 0; i <size; i  ){
            if (elementData[i].equals(t)) {
                int numMoved = size - i - 1;
                if (numMoved > 0) {
                    System.arraycopy(elementData, i 1, elementData, i,
                            numMoved);
                }
                elementData[--size] = null; // clear to let GC do its work
            }
        }
        return false;
    }

    public static void main(String[] args) {
        ArrayList<Object> objects = new ArrayList<>();
        objects.remove("a");
        MyArrayList<Object> objectMyArrayList = new MyArrayList<>();

        for (int i = 0; i < 11; i  ) {
            objectMyArrayList.add(i);
        }
        for (int i = 0; i <11; i  ){
            System.out.println(objectMyArrayList.get(i));
        }
    }
}

arraylist与vector集合有哪些区别

相同点:都是基于数组实现的,默认容量都为10. 不同点:vector安全(2倍扩容),arraylist线程不安全(1.5扩容)。

hashset源码

底层是hashmap存储,key就是hashset存放的元素,value值就是空的object对象。

hashset为什么无序

每次put操作,计算index都是散列。遍历每次都是从头。 hashmap也是无序。

hashset数据结构

数组 链表 红黑树

linkedlist

原理基于链表结构,双向链表

数组和链表的区别

  1. 数组:保证元素的有序性 可以 基于下标查询(o1),查询。
  2. 链表:单向链表和双向链表(可以基于下表查询)(on),增删。

0 人点赞