对比 Vector、ArrayList、LinkedList有何区别

对比 Vector、ArrayList、LinkedList有何区别?

Vector是Java早期提供的线程安全的动态数组,如果不需要线程安全,并不建议选择,毕竟同步是有额外开销的。Vector内部是使用对象数组来保存数据,可以根据需要自动的增加容量,当数据已满时,会创建新的数组,并拷贝原有数组数据。

ArrayList是应用更加广泛的动态数组实现,它本身不是线程安全的,所以性能要好很多,与Vector近似,ArrayList也是可以根据需要调整容量,不过两者的调整逻辑有所区别,Vector在扩容时会提高1倍,而ArrayList则是增加50%。

LinkedList顾名思义是Java提供的双向链表,所以它不需要像上面那样调整容量,它也不是线程安全的。

-Vector和ArrrayList作为动态数组,其内部元素以数组形式顺序存储的,所以非常适合随机访问的场合。除了尾部插入和删除元素,往往性能会相对较差,比如我们在中间位置插入一个元素,需要移动后续所有元素。

-而ArrayList进行结点插入、删除却要高效很多,但是随机访问性能则要比动态数组慢。

知识扩展

 

集合:就像是一种容器。用于存储、获取、操作对象的容器。
1. 数组的弊端
①数组的长度不可变 ②数组没有提供可以查看有效元素个数的方法
2. 集合的特点
①集合的长度是可变的
②集合可以存储任意类型的对象
③集合只能存储对象
3. 集合框架
java.util.Collection : 集合层次的根接口
    |--- java.util.List: 有序的,可以重复的。
        |--- ArrayList: 采用数组结构存储元素。 查询操作多时选择
        |--- LinkedList: 采用链表结构存储元素。 增删操作多时选择
        |--- Vector:
    |--- java.util.Set: 无序的,不允许重复。
        |--- HashSet : 是 Set 接口的典型实现类。
            判断元素是否存在的依据是:先比较 hashCode 值,若 hashCode 存在,再通过 equals() 比较内容
                                     若 hashCode 值不存在,则直接存储

            注意:重写 hashCode 和 equals 二者需要保持一致!
            |--- LinkedHashSet: 相较于 HashSet 多了链表维护元素的顺序。遍历效率高于 HashSet , 增删效率低于 HashSet
        |--- TreeSet : 拥有自己排序方式
            |-- 自然排序(Comparable):
                ①需要添加 TreeSet 集合中对象的类实现 Comparable 接口
                ②实现 compareTo(Object o) 方法
            |-- 定制排序(Comparator)
                ①创建一个类实现 Comparator 接口
                ②实现 compare(Object o1, Object o2) 方法
                ③将该实现类的实例作为参数传递给 TreeSet 的构造器

 

全部评论

相关推荐

10-10 16:30
济宁学院 Java
不想做程序员:面试官:蓝桥杯三等奖?你多去两次厕所都能拿二等吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务