Java集合

2023-12-27 17:39:37

Java集合主要包括Collections(存放单一元素)和Map(存放键值对)

Collections包括:Set,List,Queue

Set包括HashSet,LinkedHashSet,TreeSet

List包括ArrayList,LinkedList,Vector

Queue包括PriorityQueue,DelayQueue,ArraDeque

Map包括:HashMap,LinkedHashMap,Hashtable,TreeMap

ArrayList原理

构造方法

ArrayList(int initialCapacity)

initialCapacity>0,实例化数组,长度即指定长度

initialCapacity=0,实例化数组,为空

initialCapacity<0,抛出异常

ArrayList():

创建一个空数组,但此时数组为空。等有元素放入时,才会变成10.

ArrayList(Collection<? extends E> c):

传入的是一个Collection对象,

如果Collection对象长度>0,则执行Arrays.copy()方法将Collection对象内容复制

如果Collection对象长度=0,则将初始化空数组

代码示例
 public static void main(String[] args) {

        ArrayList<Object> arr1 = new ArrayList<>();

        arr1.add("test1");
        arr1.add("test2");
        System.out.println("arr1 " + arr1);
        ArrayList<Object> arr2 = new ArrayList<>(arr1);
        System.out.println("arr2 " + arr2);

    }
输出结果
arr1 [test1, test2]
arr2 [test1, test2]

get()方法

先检查有无越界,然后通过数组下标获取元素(因为ArrayList底层是数组)

set(int index,E element)方法

先检查有无越界,记录该位置的旧值,替换新值,返回旧值

add()方法

add(E element)

如果数组为空,该数组的容量变成10,

如果数组不为空,则添加元素后小于数组长度,则不会扩容,否则就会扩容,

如当第一次调用add()方法时候,elementData.length为0,然后扩容成10,后面继续添加9个元素,依然不会扩容,因为没有超过数组容量10,当添加第11个元素时,会调用grow()方法扩容,int newCapacity = oldCapacity + (oldCapacity >> 1)

然后调用Arrays.copy(int [] origial,int newLength)方法,在这个方法中,创建一个新数组,长度为newLength,然后调用System.arratcopy()方法将旧数组拷贝给新数组,并返回新数组。

add(int index, E element)

先检查是否越界,确认list容量,容量不够,就+1;对数组index开始的元素进行复制到index+1开始的位置,目的就是空出index的位置插入element.

LinkedList原理

构造方法

LinkedList()

LinkedList(Collection<? extends E> c)

add()方法

add(E e)

将最后一个元素赋值给节点L,创建新节点,设置新节点的前驱节点为L,后继节点为空,同时更新last节点为新节点,并且判断L是否为空,如果为空则是第一次添加,将first赋值为新节点,否则L的next节点就是新节点。

尾部插入元素

add(int index, E element)

在指定位置添加元素,如果index等于链表长度,则调用linkLast(element)方法;

如果索引是否小于节点数量的一半,从头开始查找;

否则从尾部开始查找。

remove()方法

remove(E e)

删除链表中首次出现的指定元素,如果不存在该元素则返回 false。

remove(int index)

HashMap()原理

未完结

文章来源:https://blog.csdn.net/xuan__xia/article/details/134875736
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。