1、集合的概念
(1)集合的定义
集合类是可以往里面保存多个对象的类,存放的是对象。
Java的集合类是java.util包中的重要内容,它允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。
(2)和数组的区别
数组的长度是固定不变的,而集合的长度是可变的。
数组的元素可以是任何类型,集合的元素只能是引用数据类型。
(3)集合框架
2、集合的分类
java的集合分为两大类:Collection和Map。
(1)Collection集合
每个元素都是一个单一值
Collection又分为List和Set。
List是有序集合,可以存储重复元素;
Set是无序集合,不可以存储重复元素。
(2)Map集合
每个元素是一个键值对
3、Collection集合
(1)java.util.Collection接口
它是一个接口,不能实例化。
(2)抽象方法
int size()
返回此集合中的元素数。
boolean isEmpty()
如果此集合不包含元素,则返回 true 。
boolean add(E e)
确保此集合包含指定的元素(可选操作)。
boolean contains(Object o)
如果此集合包含指定的元素,则返回 true 。
void clear()
从此集合中删除所有元素(可选操作)。
boolean remove(Object o)
从该集合中删除指定元素的单个实例(如果存在)(可选操作)。
Object[] toArray()
返回一个包含此集合中所有元素的数组。
Iterator<E> iterator()
返回此集合中的元素的迭代器。
4、List集合
(1)java.util.List接口
它是一个接口,不能实例化。
List继承了Collection!!
List是有序的集合,可以存储重复的元素。
(2)抽象方法
继承的方法:
int size()
返回此集合中的元素数。
boolean isEmpty()
如果此集合不包含元素,则返回 true 。
boolean add(E e)
确保此集合包含指定的元素(可选操作)。
boolean contains(Object o)
如果此集合包含指定的元素,则返回 true 。
void clear()
从此集合中删除所有元素(可选操作)。
boolean remove(Object o)
从该集合中删除指定元素的单个实例(如果存在)(可选操作)。
Object[] toArray()
返回一个包含此集合中所有元素的数组。
Iterator<E> iterator()
返回此集合中的元素的迭代器。
(3)实现类ArrayList
构造器:
ArrayList()
构造一个初始容量为十的空列表。
集合元素遍历:
第一种方法
for(var i=0;i<list.size();i++){
元素=list.get(i);
}
第二种方法
Iterator it=list.iterator();
while(it.hasNext()){
元素=it.next();
}
第三种方法
for(Object o : list){
//元素o
}
第四种方法(JDK8之后才有)
list.forEach(o -> 元素o );
(4)实现类区别
ArrayList、Vector、LinkedList之间:
- Vector是按照数组结构存储数据的,是线程安全的,效率低。
- ArrayList是按照数组结构存储数据的,是非线程安全的,效率高。
- ArrayList是按照数组结构存储数据的,是非线程安全的,增删效率低,查询效率高。
- LinkedList是按照链表结构存储数据的,是非线程安全的,增删效率高,查询效率低。
5、Set集合
(1)java.util.Set接口
它是一个接口,不能实例化。
Set继承了Collection!!
Set是无序的集合,不可以存储重复的元素。
(2)抽象方法
继承的方法:
int size()
返回此集合中的元素数。
boolean isEmpty()
如果此集合不包含元素,则返回 true 。
boolean add(E e)
确保此集合包含指定的元素(可选操作)。
boolean contains(Object o)
如果此集合包含指定的元素,则返回 true 。
void clear()
从此集合中删除所有元素(可选操作)。
boolean remove(Object o)
从该集合中删除指定元素的单个实例(如果存在)(可选操作)。
Object[] toArray()
返回一个包含此集合中所有元素的数组。
Iterator<E> iterator()
返回此集合中的元素的迭代器。
扩展的方法:(只对继承add方法进行了限制,不允许添加重复元素)
boolean add(E e)
如果指定的元素不存在,则将其指定的元素添加(可选操作)。
(3)实现类HashSet
构造器:
HashSet()
构造一个新的空集合; 背景HashMap实例具有默认初始容量(16)和负载因子(0.75)。
集合元素的遍历:
第一种方法
Iterator it=set.iterator();
while(it.hasNext()){
元素=it.next();
}
第二种方法
for(Object o : set){
//元素o
}
第三种方法JDK8
set.forEach(o -> 元素o );
(4)实现类的区别
HashSet、LinkedHashSet、TreeSet之间:
- HashSet底层数据结构是哈希表。(无序,唯一);
- LinkedHashSet底层数据结构是链表和哈希表。(FIFO插入有序,唯一);
- TreeSet底层数据结构是红黑树。(唯一,有序)
- HashSet插入数据最快,其次LinkHashSet,最慢的是TreeSet因为内部实现排序;
- HashSet不保证有序,LinkHashSet保证FIFO即按插入顺序排序,TreeSet安装内部实现排序,也可以自定义排序规则;
- HashSet和LinkHashSet允许存在null数据,但是TreeSet中插入null数据时会报NullPointerException;