数组的特点:
1. 只能存储同一种数据类型的数据。
2. 一旦初始化,长度固定。
3. 数组中的元素与元素之间的内存地址是连续的。
注意: Object类型的数组可以存储任意类型的数据。
集合:集合是存储对象数据的集合容器。
集合比数组的优势:
1. 集合可以存储任意类型的对象数据,数组只能存储同一种数据类型 的数据。
2. 集合的长度是会发生变化的,数组的长度是固定的。
Java2的集合框架,抽其核心,主要有三种:List、Set和Map。
Collection、List、Set和Map都是接口(Interface),不是具体的类实现。List lst = new ArrayList(); 这是我们平常经常使用的创建一个新的List的语句,在这里, List是接口,ArrayList才是具体的类。
常用集合类的继承结构如下:
Collection<--List<--Vector
Collection<--List<--ArrayList
Collection<--List<--LinkedList
Collection<--Set<--HashSet
Collection<--Set<--HashSet<--LinkedHashSet
Collection<--Set<--SortedSet<--TreeSet
Map<--SortedMap<--TreeMap
Map<--HashMap
List:
List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下 >标)来访问List中的元素,这类似于Java的数组。 特点: 有序,可重复。
ArrayList:
同Vector一样是一个基于数组上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector好一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。特点: 查询速度快,增删慢。
LinkedList:
LinkedList不同于前面两种List,它不是基于数组的,所以不受数组性能的限制。特点: 查询速度慢,增删快。
Vector:
基于数组(Array)的List,其实就是封装了数组所不具备的一些功能方便我们使用,所以它难易避免数组的限制,同时性能也不可能超越数组。所以,在可能的情况下,我们要多运用数组。另外很重要的一点就是Vector是线程同步的(sychronized)的,这也是Vector和ArrayList 的一个的重要区别。
1.ArrayList: 元素单个,效率高,多用于查询
2.LinkedList:元素单个,多用于插入和删除
3.Vector: 元素单个,线程安全,多用于查询
大多数情况下,从性能上来说ArrayList最好,但是当集合内的元素需要频繁插入、删除时LinkedList会有比较好的表现,但是它们三个性能都比不上数组,另外Vector是线程同步的。所以: 如果能用数组的时候(元素类型固定,数组长度固定),请尽量使用数组来代替List; 如果没有频繁的删除插入操作,又不用考虑多线程问题,优先选择ArrayList; 如果在多线程条件下使用,可以考Vector; 如果需要频繁地删除插入,LinkedList就有了用武之地; 如果你什么都不知道,用ArrayList没错。