JavaSE-集合框架
集合框架
Java集合框架体系
java.util.Collection:存储一个一个的数据
- 子接口:List:存储有序、可重复的数据(“动态”数组)
- ArrayList(主要实现类)、LinkedList、Vector
- 子接口:Set:存储无序、不可重复的数据(中学数学中的集合)
- HashSet(主要实现类)、LinkedHashSet、TreeSet
java.util.Map:存储一对一对的数据(key-value键值对,类似于中学数学的函数)
-
- HashMap(主要实现类)、LinkedHashMap、TreeMap、Hashtable、Properties
Collection接口
常用方法
Collection中有15个常用的方法,其实现类可以使用
集合和数组的转换
集合–>数组toArray
数组–>集合调用Arrays的静态方法asList
向Collection中添加元素的要求:元素所属类一定要重写equals方法
因为Collection的相关方法(contains、remove)在使用时要调用equals方法
遍历
iterator迭代器:
iterator迭代器常用来遍历集合元素
1 | while(iterator.hasNext()){ |
(补充)增强for循环:
作用:遍历数组和集合
格式:
1 | for(要遍历的集合或数组的元素类型 临时变量 : 要遍历的集合或数组变量){ |
说明:
- 针对于集合来讲,增强for循环底层仍使用的是迭代器
- 增强for循环执行的过程中,是将集合或数组中的元素依次赋值给临时变量,注意,循环体中对临时变量的修改,可能不会导致原有集合或数组元素的修改
List接口
常用方法
第一部分:
Collection中声明的15个方法
第二部分:因为LIst是有序的,所以会增加一些索引方法
常用方法大致可分为:增、删、改、查、插、长度、遍历
方法声明 | 说明 |
---|---|
add(Object ele) | 添加ele元素 |
addAll(Collection eles) | 将eles中的所有元素添加进来 |
remove(Object ele) | 删除指定索引的元素,并返回此元素 |
remove(int index) | 删除指定索引的元素,并返回此元素 |
set(int index , Object ele) | 设置指定索引位置的元素为ele |
get(int index) | 获取指定索引元素 |
add(int index , Object ele) | 在指定索引插入ele元素 |
addAll(int index , Collection eles) | 从指定索引开始将eles中的所有元素插入进来 |
size() | 获取长度 |
interator() | 遍历 |
增强for循环 | 遍历 |
List接口不同实现类的对比
使用情况 | 线程安全性 | 数据结构 | 添加、查找效率 | 插入、删除效率 | |
---|---|---|---|---|---|
ArrayList | 主要实现类 | 线程不安全 | Object[] | 高 | 低 |
LinkedList | ——— | ——— | 双向链表 | 低 | 高 |
Vector | 基本被抛弃 | 线程安全 | Object[] | 低 | 低 |
Set接口
相较于List、Map,Set的使用频率相对较低。常用来过滤重复数据。
理解:
-
无序性:
-
与添加的元素的位置有关,不像ArrayList是依次紧密排列的。这里是根据添加元素的哈希值,计算的其在数组中的存储位置,表现为无序性;
-
不等于随机性;
-
不等于添加的元素的顺序和遍历元素的顺序不一致。
-
-
不可重复性:
- 添加到Set中的元素是不能相同的。比较的标准,需要根据hashCode()得到的哈希值以及equals方法得到的boolean型的结果。哈希值相同且equals方法返回true则相同。
添加到HashSet和LinkedSet的元素的要求:重写equals和hashCode,二者结果尽量保持一致性。
TreeSet实现类
添加元素的要求:
- 添加到TreeSet中的元素必须是同一个类型的对象;
- 添加的元素需要考虑排序。
注意:
- 判断数据相同的标准,不再是hashCode和equals方法,也就意味着不用再重写这两个方法;
- 比较元素大小或者是否相同的标准就是自然排序或定制排序中comparaTo或compare的返回值。如果相等,则认为两个对象相等,则后一个相等的元素就不能添加到TreeSet中。
常用方法
即为Collection中声明的15个抽象方法,没有新增的方法。
Set接口不同实现类的对比
关系 | 数据结构 | 特点 | |
---|---|---|---|
HashSet | 主要实现类 | Hashmap | ——— |
LinkedHashSet | HashSet的子类 | Hashmap+双向链表 | 便于频繁的查询操作 |
TreeSet | ——— | 红黑树 | 可按元素的指定属性的大小顺序遍历 |
Map接口
HashMap中元素的特点
-
HashMap中的所有key彼此之间是不可重复的、无序的。所有的key就构成一个Set集合。–>key所在的类要重写hashCode和equals
-
HashMap中的所有value彼此之间是可重复的、无序的。所有的value就构成一个Collection集合。–>value所在的类要重写equals
-
HashMap中的一个key-value,就构成了一个entry。
-
HashMap中的所有entry彼此之间是不可重复的、无序的。所有的entry就构成一个Set集合。
TreeMap实现类
TreeMap和TreeSet底层接口一致,使用上只要将TreeSet中元素的地位替换为TreeMap中的Key的地位即可。也就是说,对TreeSet元素的要求都更换为对key的要求。
常用方法
增 | 删 | 改 | 查 | 长度 | 遍历 |
---|---|---|---|---|---|
put(Object key,Object value) | Object remove(Object Key)返回value | put(Object key, Object value) | Object get(Object key)获取key对应的value | size() | 遍历key集:Set keySet() |
putAll(Map m) | putAll(Map m) | 遍历value集:Collection values() | |||
遍历entry集:Set entrySet() |
Map接口及其实现类的对比
关系 | 线程安全性 | 效率 | 健壮性 | 数据结构 | 特点 | |
---|---|---|---|---|---|---|
HashMap | 主要实现类 | 线程不安全 | 高 | 好,可以添加null | 数组+单向链表+红黑树 | ——— |
LinkedHashMap | HashMap子类 | ——— | ——— | ——— | HashMap+双向链表 | 便于频繁的遍历操作 |
TreeMap | ——— | ——— | ——— | ——— | 红黑树 | 可按元素的指定属性的大小顺序遍历 |
Properties | ——— | ——— | ——— | ——— | ——— | 键值对是String类型 |
Hashtable | 类似HashMap,但是废弃 | 线程安全 | 低 | 不好,不可添加null | 数组+单向链表 | ——— |
Collections工具类
Collections是一个操作List、Set、Map等集合的工具类—>v162