Java -- Vector底层结构-- ArrayList和LinkedList的比较
目录
1. Vector底层结构和源码剖析
2. LinkedList的全面说明
3. ArrayList和LinkedList的比较
如何选择ArrayList和LinkedList:
4. Set接口和常用的方法
Set接口的遍历方式:
1. Vector底层结构和源码剖析
1. Vector底层也是一个对象数组,protected Object【】 elementData
2. Vector是线程同步的 ,操作方法带有synchronized
3. 在开发中,需要做线程同步安全时,考虑使用Vector
2. LinkedList的全面说明
1. LinkedList底层实现了双向链表和双端队列的特点
2. 可以添加任意元素,包括null
3. 线程不安全,没有实现同步
3. ArrayList和LinkedList的比较
ArrayList:可变数组,效率较低 数组扩容 改查效率较高
LinkedList:双向链表 较高,通过链表追加 改查效率较低
如何选择ArrayList和LinkedList:
1. 如果我们改查的操作多,选择ArrayList
2. 如果我们增删的操作多,选择LinkedList
3. 一般来说,在程序中,80%-90%都是查询,因此大部分情况下会选择ArrayList
4. 在一个项目中,根据业务灵活选择,也可能这样,一个模块使用的是ArrayList,另外一个模块是LinkedList,也可以根据业务来进行选择
4. Set接口和常用的方法
和list接口一样,set接口也是Collectiond子接口,因此常用方法和Collection接口一样
Set接口的遍历方式:
同Collection的遍历方式一样,因为Set接口是Collection接口的子接口。
1. 可以使用迭代器 2. 增强for 3. 不能使用索引的方式来获取
//1. 以Set接口的实现类 HashSet来讲解 Set接口的方法// set接口实现类的对象(Set接口对象)// set接口对象存放数据是无序的 即添加顺序和取出顺序不一致// 取出顺序固定的 不会变化 虽然不是添加顺序Set set = new HashSet();set.add("jone");set.add("luck");set.add("jone");//set.add(null);set.add(null);//System.out.println("set="+set);//System.out.println("=======");Iterator iterator = set.iterator();while (iterator.hasNext()) {Object obj = iterator.next();System.out.println("obj="+obj);}//System.out.println("=====for=====");for (Object o :set) {System.out.println("o="+o);}