集合
集合类存放于Java.util包中
集合类型主要有三种:set(集)、list(列表包含Queue)、map(映射)。
Collection:Collenction是集合的基本接口,List、Set、Queue的最基本的接口。
Iterator:迭代器,可以通过迭代器遍历集合中的数据
Map:是映射表的基本接口
List有序集合
java的List是非常常用的数据类型,List是有序的Collection。Java List一共三个实现类:分别是ArrayList、Vector和LinkedList
ArrayList:ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数据进行复制、移动代价比较高。因此,它适合随机查询或遍历,不适合插入和删除。
Vector:Vector与ArrayList一样,也是通过数组实现的,不同的是它支持现场的同步,即在每一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。
LinkedList:linkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和便利速度比较慢,另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当做堆栈、队列和双向队列使用。
说明:
1、ArrayList在内存不够时默认是扩展50%+1个,Vector是默认扩展1倍。
2、Vector属于线程安全级别的,但是大多数情况下不使用Vector,因为线程安全需要更大的系统开销。
3、一般使用ArrayList和LinkedList比较多
4、对于随机访问get和set方法,ArrayList由于LinkedList,因为Linkedlist要移动指针
5、对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据
ArrayList
ArrayList是最常用的List实现类。ArrayList内部是通过数组实现的。所以只适合遍历或者随机查找
LinkedList
是以链表的结构进行存储对象的,动态新增和删除是很快,但是把你就很慢,并且不存在get()而操作,不能单个定位。说白了,ArrayList是顺序存储结构,LinkedList是链表存储结构。
Map集合
包含:HashMap、TreeMap
HashMap特点:
1.HashMap是无序的散列映射表;
2.HashMap通过Hash算法来决定存储位置;
3.底层实现是哈希表
TreeMap特点:
1.适用于按自然顺序或自定义顺序便利键(key)
2.底层是二叉树
3.提供compareTo,可以定义排序方法
Set集合
Set集合的几个特点:
1.Set集合不允许出现重复数据
2.允许包含值为null的元素,但最多只能有一个null元素
TreeSet的几个特点:
1、TreeSet不能有重复的元素
2、TreeSet具有排序功能,缺省是按照自然排序进行排列
3、TreeSet中元素必须实现Comparable接口并重写compareTo()方法,TreeSet判断元素是否重复、以及确定元素的顺序靠的都是这个方法
4、基于TreeMap实现的
HashSet的几个特点:
1、HashSet不能有重复的元素
2、HashSet是无序的
3、HashSet也是基于HashMap实现例子