常用集合关系图
集合方法关系图
Collection
- 定义
- Collection是单列集合, 用于存储单个元素
- 分类
- List 集合中的元素是有序的,可以存放重复元素
- Queue 队列, 除优先级外, 保持先进先出的原则(基本不用)
- Set 集合中的元素是无序的, 不能存放重复的元素
List
-
定义
- List集合是有序的,可以储存重复的数据
- List集合通过记录元素在集合中的位置来准确的查找元素
-
List集合体系
- ArrayList 底层使用数组(线程不安全)
- LinkedList 底层使用链表
- Vector 底层使用数组(线程安全的,不推荐使用)
Set集合
- 定义
- Set集合存储的元素是无序的, 而且不允许储存重复的元素
- 每当有新的元素存入的时候,Set集合会先去过滤, 如果发现和集合中现有元素出现重复, 就不在允许添加
Map集合
-
定义
- Map集合是一个双列集合,以键值对的形式存在
- 将键和值捆绑到一起存放(Map.Entry)
- 一个映射不能包含重复的键
- 如果出现相同的键,会用新的值覆盖老的值
- 每个键最多只能映射到一个值
-
Map接口和Collection接口的不同
- Map是双列的,Collection是单列的
- Map集合的数据结构针对键有效, 跟值无关, Collection 集合的数据结构是针对元素有效
-
存储原理解析
- 当我们将key和value存入Map集合的时候, map集合会创建一个Map.Entry对象包裹住键值对然后通过key计算出一个角标, 然后存入进入集合中
遍历方式
迭代器
-
定义
-
集合是用来存储元素,存储的元素需要查看,那么就需要迭代(遍历)
-
迭代器的使用
-
Collection c = new ArrayList(); c.add(); //ArrayList c = new ArrayList(); //HashSet s = new HashSet(); Iterator it = c.iterator(); //Iterator it= 单列集合.iterator(); while (it.hasNext()) {//判断是否有下一个元素,如果有则返回true,否则返回false // 如果有就取出这个元素 Object object = (Object) it.next();//返回当前指针所在位置上的元素 System.out.println(object); }
-
Foreach
-
foreachd 的使用格式
/* for(目标容器中的数据类型 临时变量名 : 目标容器) { } */
遍历的过程中增删集合中的元素
- 三种迭代方式的删除
- 普通for循环,可以删除,但是需要索引(可以用但有逻辑问题)
- 迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常
- 增强for循环不能删除
泛型(了解)
- 预编译我们的集合,规定了本集合中只能存放指定类型的数据
- 保证数据的统一性、纯洁性
- 例:ArrayList<>
ArrayList,HashSet,HashMap遍历
ArrayList a01 = new ArrayList();
HashSet s01 = new HashSet();
//1、循环for-while
for(int i=0;<a01.size();i++)//或while
Sysout.println(a01.get(i))
//2、迭代器
Iterator it =a01.iterator();
Iterator it =S01.iterator();//set 除了迭代器定义不同,其它相同
while(it.hasNext()){
Object obj=(Object) it.next();
Sysout->obj;
}
//3、for-each
//for(Object obj :s01)set这里改一下其它一致
for(Object obj: a01)
Sysout->obj
//================================================
//HashMap 的遍历比较特殊,不可直接遍历,需要转换一下
HashMap m=new HashMap();
//1> K ==> V 先找到key值来找到v值
Set keys=m.keySet();
//2> entry(实例-[key-value键值对封装成set集合])
Set e=m.entrySet();
//Set<Map.Entry<E,E> > en=m.entrySet();3>泛型后,可分别输出
//遍历key--迭代器 或 foreach(不写)
Iterator it=keys.iterator();
while(it.hasNext()){
Object obj=(Object ) it.next();
sysout-> m.get(obj) //V 值
//K==>V
}
//Iterator<Entry<E,E>> it=en.iterator();
//while(it.hasNext()){
// Map.Entry<E,E> e=it.next();
// sys->e.getKey();
// Sys->e.getValue();
//}
Iterator it= e.iterator();
while(it.hasNext()){
sys->it.next()
}