集合分为Collection和Map两种体系。
Collection 接口是集合的根接口之一,Collection接口有三大子接口:List(列表)、Set(集合)、Queue(队列)
- List接口中元素有固定下标(有序,可重复)。
- Set接口中元素保存不重复,且只有一个null,(无序,唯一)。
- Queue(队列)接口是先进先出的线性数据结构。
List接口的常用实现类:
- ArraryList:采用数组的方式进行保存数据,插入数据慢但查询数据快,是非线程安全的。
- LinkedList:采用双向链表的方式进行保存数据,其插入数据速度较快。同时LinkedList也可实现Queue接口,但是LinkedList已经实现了Queue接口。
- Vector:和ArrayList一样,采用数组的方式进行保存数据,但是线程同步的、线程安全的。
Set接口的常用实现类:
- HashSet:不可排序的,元素不可重复的,需要hashCode()和equals()。
- TreeSet:可排序,元素不可重复的。
- LinkedSet:是hashSet的子类,元素不可重复的,底层由链表实现的哈希表,保留了元素插入顺序。
Map接口里面保存的是键值对
常用实现类:
- HashMap:不可排序的且允许键值为null,是非线程安全的。
- TreeMap:可排序的。
- Hashtable:不可排序的且不允许有null值,是线程安全的。
其中,Vector已经被淘汰,可用ArrayList替代。Hashtable已经被淘汰,可用HashMap替代。如果需要解决高并发问题,可使用Map接口的子类ConcurrentHashMap;
Java中集合和数组的区别?
- 集合是Java中用来存放对象的容器。
- 数组是一种数据类型,即引用类型,数组是相同数据类型元素的集合;
- 数组的长度固定,一组数组中只能存储相同数据类型的数据。
- 集合的大小可动态扩展,一个集合中可以存储各种类型的数据。
集合和数组之间的互相转换
-
集合转为数组:
-
一维数组转为集合: