1集合的概念
现实生活中:很多的事物凑在一起
数学中的集合:具有共同属性的事物的总体。
java中的集合类:是一种工具类,就像是容器,储存任意数量有共同属性的对象。
2与数组的对比——为何选择集合而不是数组
a.数组的长度固定,集合长度可变
b.数组只能通过下标访问元素,类型固定,而有的集合可以通过类型查找所映射的具体对象。
3集合的作用
a.在类的内部,对数据进行组织;
b.简单而快速的搜索大数量的条目;
c.有的集合接口,提供了一系列排列有序的元素,并且可以在中间快速的插入或者删除有关元素;
d.有的集合接口,提供了映射关系,可以通过关键字(key)查找到对应的唯一对象,而这个关键字可以是任意类型。
4 集合的分类
List 序列:Arraylist 数组序列(list滚动列表)
Set集:HashSet 哈希集
Map:HashMap 哈希表
4.1 Collection接口
Collection接口是 (java.util.Collection)是Java集合类的顶级接口之一,整个集合框架就围绕一组标准接口而设计。
Collection方法接口介绍
Collection 接口有 3 种子类型集合: List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、ArrayBlockingQueue等,下面是Collection的所有方法。
这些方法即可以操作Set集合,也可以操作Queue和List集合,下面分别使用Collection集合接口的方法说明
方法名 | 说明 |
---|---|
boolean add(E e) | 向集合添加元素e,若指定集合元素改变了则返回true |
boolean addAll(Collection<? extends E> c) | 把集合C中的元素全部添加到集合中,若指定集合元素改变返回true |
void clear() | 清空所有集合元素 |
boolean contains(Object o) | 判断指定集合是否包含对象o |
boolean containsAll(Collection<?> c) | 判断指定集合是否包含集合c的所有元素 |
boolean isEmpty() | 判断指定集合的元素size是否为0 |
boolean remove(Object o) | 删除集合中的元素对象o,若集合有多个o元素,则只会删除第一个元素 |
boolean removeAll(Collection<?> c) | 删除指定集合包含集合c的元素 |
boolean retainAll(Collection<?> c) | 从指定集合中保留包含集合c的元素,其他元素则删除 |
int size() | 集合的元素个数 |
T[] toArray(T[] a) | 将集合转换为T类型的数组 |
因为set和list都继承Collection接口,所以colletion接口的方法这两者都可以调用。
4.2 Map接口
是一些键值对<key,value>的集合,每一个键值对可以看做一个entry
三个实现类:HashMap,HashTable,TreeMap。
最常用的是HashMap
声明: Map<String , String > map = new HashMap();
散列映射:HashMap,树映射:TreeMap
方法名 | 说明 |
---|---|
put(key,value) | 用来设置键值对 |
get(key) | 用来获取key键相应的值 |
Set keySet() | 返回map中key的Set集合 |
Collection values() | 将map中的value以Collection的形式返回 |
Set<Map.Entry<K, V>> entrySet() | 返回map中多个项的Set集合(此方法适合既获取key又获取value的场景,非常实用) |
Map.Entry
Entry<K, V> 是Map内部的接口,其中定义了一些方法:
方法名 | 说明 |
---|---|
K getKey() | 返回此项对应的key |
V getValue() | 返回此项对应的value |
V setValue(V value) | 设置此项中value值 |
5 List接口及其实现类
list 是元素有序并且可以重复的集合,被称为序列。
List可以精确的控制每个元素的插入位置,或删除某个位置元素
5.1 ArrayList
ArrayList——数组序列,是list的一个重要实现类。
Arraylist底层是由数组实现的。
是list的一种数组形式的实现,实现了可变大小的数组,随机访问和遍历元素时,提供更好的性能。该类也是非同步的,在多线程的情况下不要使用。ArrayList 增长当前长度的50%,插入删除效率低。优点:遍历速度快。
声明: List<泛型形式> list = new ArrayList();
.get();方法可以获取相应位置的数组
5.2 LinkedList:
是list的一种链表实现。优点:添加、删除元素快
声明: LinkedList<泛型形式> linkedList = newLinkedList<>();
//可以直接用接口list来开辟空间也可直接用LinkedList来开辟
.get();方法可以获取相应位置的链表
6 Set接口
set接口,长度可变,不能重复,无序;<实现类有HashSet,TreeSet>。
声明: Set set = new HashSet<>();
7 Set和List的区别
Set 接口实例存储的是无序的,不重复的数据。List存储的是有序的,可以重复的元素。
Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变
List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变
8 总结
1.Java的集合框架分别派生自Collection和Map接口。
Collection有两个常用子接口List和Set,分别表示有序可重复,无序不可重复的集合。
2.Collection又可以分为List、Queue、Set三个接口。
3.List是与元素有序并且可以重复的集合,被称为序列。List可以精确的控制每个元素的插入位置,或删除某个位置元素。List接口的实现类我们常用的有Arraylist和LinkedList 。
Arraylist,数组序列底层是由数组实现的,实现了数组可变大小的数组,随机访问和遍历元素快,插入删除效率低。
LinkedList,链表序列底层是由链表实现的,优点添加删除快。
4.Set接口,长度可变,元素不能重复,无序。常用的实现类是HashSet,底层是由Hash表实现的
5.Map接口是无序,不能重复的,常用实现类是HashMap,底层是由Hash实现的。