Java日常学习之集合
以下是本篇文章正文内容,下面内容为自己日常学习总结,可能有些地方不太全面,望谅解集合
- 一、集合及其应用环境
- 二、集合和数组的对比
- 三、集合架构和分类
-
- 1.List
- 2.Set
- 3.Map
- 四、补充
一、集合及其应用环境
Java集合类存放在java.util包中,是一个用来存放对象的容器。
注意:
①集合只能存放对象,不能放基本的数据类型。
Integer等即为对象
②集合存放的都是对象的引用,而非对象本身。
③集合可以存放不同类型,不限数量的数据类型。
适用环境:
当我们需要将一些相同结构的个体整合在一起时,就可以考虑使用集合了。
二、集合和数组的对比
相似点:
- 都可以存储多个对象,对外作为一个整体存在
数组的缺点:
- 长度必须在初始化时指定,且固定不变
- 数组采用连续存储空间,删除和添加效率低下
- 数组无法直接保存映射关系
- 数组缺乏封装,操作繁琐
三、集合架构和分类
- Collect 接口存储对象的特征为不唯一,无序
- List接口存储对象的特征为不唯一,有序(索引顺序)
- Set接口存储对象的特征为唯一,无序
- Map接口存储一组键值对,key 唯一 无序,value 不唯一 无序
以下将不再复述他们的特征
1.List
-
ArrayList
特性: 线性表中的顺序表 实现长度可变数组 特征: 按索引遍历元素和随机访问速率快 添加和删除难
-
LinkedList
特性: 线性双向链表 遍历和随机访问元素效率低 特征: 添加和删除效率高 遍历和访问效率低
-
常用指令
获取元素 get(位置) 添加元素到指定位置 add(位置,值) 添加多个元素 addAll 遍历输出 toString 修改指定位置值 set(位置,值) 删除 remove(位置)
-
综述:
ArrayList 随机访问多用 LinkedList 添加和删除多,增加了对首尾的操作
2.Set
-
HashSet
特性: 采用Hashtable存储结构 特征: 添加、查询和删除速度快 无序
hash 基于计算,直接计算到地址
步骤:①计算哈希码 ②计算存储位置 ③存入指定位置
-
LinkedHashSet
特性: 采用哈希存储结构,同时使用链表维护次序 特征: 有序
-
TreeSet
特性: 采用二叉树(红黑树)的存储结构 特征: 有序 查询速度比List快(按内容查询) 查询速度没有HashSet快
按内容查询速度:线性表 > 树 > 哈希表
3.Map
-
HashMap
特性: key 无序 唯一 (Set) Value 无序 不唯一 (Collection)
-
LinkedHashMap
特性: 底层结构是hash+链表 key 有序(添加顺序) 唯一 LinkedHashSet value 无序 不唯一 Collection
-
TreeMap
特性: 底层结构是红黑树 key 有序(自然顺序) 唯一 value 无序 不唯一 Collection
-
常用指令
获取相应元素的值 get("键值") 添加元素到指定位置 add(位置,值) 键值 keySet() 清除 clear()
-
Map遍历
Set<Map.Entry<String,String>> entrySet = map.entrySet();
Iterator<Map.Entry<String,String>> it = entrySet.iterator();
while (it.hasNext()){
Entry<String,String> entry = it.next();
System.out.print(entry.getKey());
}
map中没有迭代器所以要进行遍历时,先得到所有的key-value组成的set,再进行遍历set
entrySet()返回映射所包含的映射关系的Set集合(一个关系就是键值对)
四、补充
泛型
可以规定其所加类型
例:ArrayList<Integer(或自定类型)> list = new ArrayList();
改善集合的安全性和方便性,无需考虑添加元素是否一致,加入或取出无需强转
集合中的遍历
for
foreach
Iterator(Map中不可用)
谢谢观看!