Java集合框架大致可以分为五个部分:List列表,Set集合、Map映射、迭代器、工具类List 接口通常表示一个列表(数组、队列、链表栈),其中的元素 可以重复 的是:ArrayList 和LinkedList,另外还有不常用的Vector。LinkedList实现来 ...
Java集合框架大致可以分为五个部分:List列表,Set集合、Map映射、迭代器、工具类
List 接口通常表示一个列表(数组、队列、链表
栈),其中的元素 可以重复 的是:ArrayList 和LinkedList,另外还有不常用的Vector。LinkedList实现来Queue接口,因此也可以作为队列使用。
Set接口通常表示一个集合,其中的元素 不可以重复 (通过hashcode和equals函数保证),常用的实现类有HashSet和TreeSet
Map是一个 映射接口 ,其中的每个元素都是一个 key-value键值对 ,同样抽象类AbstractMap通过适配器模式实现了Map接口中的大部分函数,TreeMap
HashMap、WeakHashMap等实现类都通过继承AbstractMap实现的,另外,不常用的HashTable直接实现了Map接口。
Iterator是遍历集合的迭代器(不能遍历Map,只用来遍历Collection),Collection的实现类都实现了iterator()函数,它返回一个Iterator对象,用来遍历集合,ListIterator则专门用来遍历List。
ArrayList
ArrayList的内部实现是基于基础的对象数组的
特点:
- 顺序表
- 大小可变
- 允许null元素
- 线程不同步、查询速度快、增删满
LinkedList
LinkedList: 内部采用链表来存储元素,支持快速插入/删除元素,但不支持高效地随机访问
一般大家都知道ArrayList和LinkedList的大致区别:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 ArrayList的内部实现是基于基础的对象数组的 , LinkedList中的get方法是按照顺序从列表的一端开始检查,直到另外一端。对LinkedList而言,访问列表中的某个指定元素没有更快的方法了。 它们之间最主要的区别在于ArrayList是可改变大小的数组,而LinkedList是双向链接串列(doubly LinkedList) ,因为Array是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大的,因为这需要重排数组中的所有数据。
public class ArraylistandLinkedlist { public static final int N = 50000; public static List values; static { Integer vals[] = new Integer[N]; Random r = new Random(); for (int i = 0, currval = 0; i < N; i++) { vals[i] = new Integer(currval); currval += r.nextInt(100) + 1; } values = Arrays.asList(vals); } static long timeList(List lst) { long start = System.currentTimeMillis(); for (int i = 0; i < N; i++) { int index = Collections.binarySearch(lst, values.get(i)); if (index != i) System.out.println("***错误***"); } return System.currentTimeMillis() - start; } public static void main(String args[]) { System.out.println("ArrayList消耗时间:" + timeList(new ArrayList(values))); System.out.println("LinkedList消耗时间:" + timeList(new LinkedList(values))); }}
原标题:Java 集合框架
关键词:JAVA
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。