java集合(一)集合总纲
一、数组和集合的比较
数组不是面向对象的,存在明显的缺陷,集合弥补了数组的缺点,比数组更灵活更实用,而且不同的集合框架类可适用不同场合。如下:
- 数组能存放基本数据类型和对象,而集合类存放的都是对象,集合类不能存放基本数据类型。数组和集合存放的对象皆为对象的引用地址。
- 数组容易固定无法动态改变,集合类容量动态改变。
- 数组无法判断其中实际存有多少元素,length只告诉了数组的容量,而集合的size()可以确切知道元素的个数
- 集合有多种实现方式和不同适用场合,不像数组仅采用顺序表方式
- 集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性即可实现各种复杂操作,大大提高了软件的开发效率
二、集合分类
Java集合分类:
- List
- Set
- Map
- Queue
- 数组
- 工具类
- 扩展类
List:
- ArrayList :动态数组。
- LinkedList:双向链表。
- Vector:线程安全的动态数组。
- Stack:对象栈,遵循先进后出的原则。
Set:
- EnumSet:枚举类型专用Set,所有元素都是枚举类型。
- HashSet:以哈希码决定元素位置的set
- TreeSet:插入时会自动排序的set,但是如果中途修改元素大小,则不会再修改后重新排序,只会在插入时排序。
LinkedHashSet 底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
Map:
- TreeMap :自动排序map,根据key值自动排序。
- HashMap:Entry数组,以key的哈希码决定元素位置,所以,要保证key的哈希码不一致,如果碰到值不同但哈希码相同的key,会以单向链表扩展
- HashTable:线程安全的
- WeakHashMap: 和HashMap一样,WeakHashMap 也是一个散列表,它存储的内容也是键值对(key-value)映射,而且键和值都可以是null。不过WeakHashMap的键是“弱键”。
- Properties:HashTable的子类,从Property文件中加载数据,并提供方便的读写操作。
- EnumMap:Key必须是枚举类型。
Queue:
- 阻塞式队列,满了以后再插入元素会抛出异常;
- ArrayBlockingQueue :以数组方式实现。
- PriorityBlockingQueue:依照优先级组件的队列。
- LinkedBlockingQueue:通过链表实现。
- DelayQueue: 优先级队列实现的无界阻塞队列。
- SynchronousQueue: 不存储元素的阻塞队列, 每一个 put 操作必须等待一个 take 操作,否则不能继续添加元素。
- LinkedTransferQueue: 链表实现的无界阻塞队列。
- LinkedBlockingDeque: 链表实现的双向阻塞队列。
- 非阻塞队列,无边界,只要内存允许,可以持续追加。
- PriorityQueue
- 双端队列,支持在头尾两端插入和移除元素。而上面的阻塞队列和非阻塞队列都时单端队列,只能在一端插入,另一端删除。
- ArrayDeque
- LinkedBlockingDeque
- LinkedList
工具类:
- 数组工具类
- java.util.Arrays
- java.lang.reflect.Array
- 集合工具类
- java.util.Collections
扩展类:
可以自己写一个List,或使用第三方实现例如:
- Apache的Commons-collections扩展包
- Google的google-collections扩展包