java基础之数据结构(ArrayList、LinkedList、Stack、Queue、HashMap)
ArrayList 和LinkedList
ArrayList底层以数组实现,内存地址连续固定,
查找快(当使用get方法查找时,可以直接计算出数组的下标位置获取到值)
增删慢,(当使用add方法和remove方法增删元素时会把数组扩容在把元素插入到指定位置,删除元素则会把指定元素删除再缩容。一次分配,分配好不会有频繁插入和删除的动作,这样的数据是适合ArrayList的)。
LinkedList底层以链表实现,内存地址分散不固定,
查找慢(当使用get方法查找时,由于地址空间不连续只能从首元素开始,依次获得下一个元素的地址)
增删快(当使用add方法和remove方法增删元素时,由于是双向链表只需要改变头尾节点的引用即可,适合占空间比较小,元素频繁插入和删除,这样的数据是适合LinkedList的)。
Stack
放入一个元素,push,称为入栈,也称为压栈
栈后进的元素必须在最尾巴
获取一个元素,pop,称为出栈,也称为弹栈
获取尾巴元素,然后把栈中的这个元素删除
栈:先入后出,一个一个压栈,一个一个弹栈
Queue
队列特点:先进先出
出队,从队列中读取,就从队列中移除
入队,只能在队列尾巴,然后排队
HashMap
在 JDK 1.7 中 HashMap 是以数组加链表的形式组成的,JDK 1.8 之后新增了红黑树的组成结构,HashMap 的初始化容量是 16,那么当 HashMap 中有 16*0.75=12个元素时,HashMap 就会进行扩容,当链表大于 8 并且容量大于 64 时,链表结构会转换成红黑树结构,JDK 1.8 之所以添加红黑树是因为一旦链表过长,会严重影响 HashMap 的性能,而红黑树具有快速增删改查的特点,这样就可以有效的解决链表过长时操作比较慢的问题。