List 集合之 LinkedList and ArrayList
本人之前有人问到本人一些问题,今日就来解答一下啊:
**LinkedList and ArrayList 俩个都List的子类,一般我们初学java的时候都是记忆arraylist linkedlist 还有 Vector **
从上图可以看出,List是有很多子接口跟子类的
但是我们只说先主要的俩个
首先来介绍一下啊 ArrayList 数据结构是
数组 一个Object 的数组,然后呢这张图还可以看出来 默认初始化数组的长度为10
也就是说你不指定arrayList 的长度的时候他默认的长度为10了,我建议是自己定义出事长度,为什么呢,我们知道,ArrayList长度是可以变的,我又说是数组,数组又怎么可能变的???我不是自相矛端嘛,别急,我们再来看看 每次add的时候,她都会去检查,自身的容器还够不够
然后将员原本的值加新长度的数组里面,长度增加原来的一半。。。感觉空间加的有点小恐怖,然后每次都要检查长度等,所以增加的速度就慢下来了。删除也是一样,要进行计算然后进行位置的移动
这就很影响速度了
让我们再来看看LinkedList
我们看到,伊,怎么有点小懵逼。。。等等再看看
看到这个大家如果有些基础的话 应该就知道这是一个迭代器,说到迭代器又可以扯很远,,又扯到指针概念,指针又扯到C 这就有点远了。。。 本文就不详细扯了。迭代器就像一个类似for循环类似,将数据一个个处理, 因为这个迭代机制从而使这个LinkedList有属于自己的方法
addFirst(E e)
addLast(E e)
getFirst()
getLast()
removeFirst()
removeLast()
头尾增删查
数据结构是链表结构
所以增删的速度快了,,但是查询的速度就慢了。。。
所以大家可以在项目里面有哪一种的话可以根据他们的特点来进行选择,,而Vector ,记住一点,除了线程安全,其他都慢。严重影响性能,可基本上不用的。。。
总结
ArrayList查询的话速记相对与他的兄弟LinkedList 来说很快了,相对而言删除和增加就慢了。。
再扯一句,,LinkedList的数据结构是链表所以使用collection的删除就要效率低了。所以建议使用Iterator的删除,而且你在循环的删除用collection的删除会报错,Iterator的不会报错,而且个数和原来的数目一致(⊙o⊙)哦
感谢观看,如有不对的地方,请多多指教