Java集合
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()原理
未完结
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!