集合
1、单列集合
1.1、list集合
A、ArraList--查询快,增删慢
B、LinkedList--查询慢,增删快
C、有序,可重复
1.2、set集合
A、HashSet集合
B、无序,不可重复
1.3、Collection
A、list set 继承了 Collection接口
2、双列集合
2.1、Map集合
A、双列的集合
B、Map接口
3、Collection
A、boolean add(E e) --添加元素
B、void clear() --清空集合
C、boolean contains(Object o) --判断集合中是否包含元素o
D、 boolean isEmpty() --判断集合是否为空
E、boolean remove(Object o)--在集合中移除元素o
F、 int size()--获取集合的长度,类似于 数组lengthStringBuildr --> length()
4、迭代器
4.1、hasNext();--判断是否存在未遍历的元素
4.2、next();--返回当前元素
代码:
package com.itheima;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionDemo {
public static void main(String[] args) {
//多态 父类引用指向子类对象
Collection<String> list = new ArrayList<String>();
//<String> 这个是泛型 我向往这个集合中添加什么类型的元素,我就往这个尖括号内写什么数据类型 添加什么数据类型就只能存储什么数据类型
//JDK1.7之后(包括1.7) 后面的泛型内容可以省略,自动沿用前面的泛型类型
list.add("过年好啊");
list.add("还学毛啊");
list.add("等着回家吃饭呢");
list.add("你学不好明年你吃啥?");
//使用迭代器对集合进行遍历
Iterator<String> it = list.iterator();
while(it.hasNext()){//用来判断集合中是否还存在未遍历的元素 存在返回true 不存在返回 false
System.out.println(it.next());
// System.out.println(it.next()); NoSuchElementException没有这样的元素异常
// System.out.println(it.next());
}
}
}
图解:
注意:迭代器遍历并不是直接遍历集合,是将集合中的元素复制一份出来进行迭代。并不是集合本身
5、List集合
5.1、代码
package com.itheima;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListDemo_01 {
public static void main(String[] args) {
/*
* 增 添加 add
* 删 删除 remove
* 改 修改 set
* 查 查询 get
*
* 创建一个List集合 添加元素 sb110 sb10086 jfshsj sb122 jkfs hsfksj
* 然后遍历集合找出以sb开头的元素删除掉 并遍历输出剩下的元素
*/
List<String> list = new ArrayList<>();
list.add("sb110");
list.add("sb10086");
list.add("jfshsj");
list.add("sb122");
list.add("jkfs");
list.add("hsfksj");
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
if (str.startsWith("sb")) {
list.remove(i);
//为什么要减减
i--;
}
}
//去倒着遍历集合 完成这个操作
//遍历
Iterator<String> it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
5.2、图例
注意:单独逆向使用列表迭代器是没有意义的,需要先正向遍历再逆向遍历才能逆向遍历出来
6、迸发修改异常
6.1、产生的原因
在迭代器循环中使用集合修改了集合中的内容,而迭代器中的内容没有修改,就会出现并发修改异常
6.2、错误信息
6.3、解决方案
A、使用迭代器--可以使用ListIterator里面的add方法 使用迭代器自己的方法来修改集合
B、使用普通for循环--遍历集合,使用集合本身修改自己
C、ListIterator中操作集合的方法
(1)、add方法--添加,添加到当前next返回的元素的后面
(2)、remove方法--删除,删除的是next返回的这个元素
7、增强for
7.1、底层其实就是迭代器,也会出现并发修改异常
8、数据结构
8.1、栈,队列
8.2、数组,链表