JavaSe—集合框架、Collection集合
目录
1、认识集合框架
2、Collection集合
2.1、Collection的常用功能
2.2 Collection的遍历方式
2.2.1 方式1 迭代器遍历
2.2.2 方法2 增强for循环
2.2.3 方法3 Lambda表达式
2.2.4 Collection三种遍历方式的区别
1、认识集合框架
- 集合是一种容器,用来装数据的。类似与数组,但集合的大小可变,开发中也非常常用
集合体系归类

集合系列结构

代码1:整体认识一下集合体系结构
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;public class CollectionDemo2 {public static void main(String[] args) {//List系列集合:添加的元素是有序的,可重复,有索引List<String> list = new ArrayList<>();list.add("hello");list.add("world");list.add("java");list.add("world");list.add("world");System.out.println("有序的,可重复->: " + list);System.out.println("通过get方法,索引->: " + list.get(0));System.out.println("set系列");//HashSet 无序,不可重复,无索引Set<String> set = new HashSet();set.add("hello");set.add("world");set.add("java");set.add("world");System.out.println("无序,不可重复->: " + set);}
}
2、Collection集合
2.1、Collection的常用功能
为什么要先学Collection呢?
- Collection是单例集合的祖宗接口,,它规定的方法(功能)是全部单例集合都会继承的。所以学习完Collection功能其他下面子类的一些功能也就会用了。


代码2:测试上面Collection通用功能
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection; //Collection 单例类的祖宗接口public class CollectionDemo3 {public static void main(String[] args) {//认识Collection的通用功能Collection<String> list = new ArrayList(); //接口 的实例化//把给定的元素添加到相应的集合System.out.println("_________________添加元素_________________");list.add("hello");list.add("world");list.add("java");System.out.println(list);System.out.println("_________________删除元素_________________");list.remove("world"); //删除指定元素System.out.println(list);System.out.println("_________判断集合中是否有指定的对象__________");System.out.println(list.contains("hello"));System.out.println(list.contains("world"));System.out.println("______________判断集合是否为空______________");System.out.println(list.isEmpty());System.out.println("_______________返回集合的大小_______________");System.out.println(list.size());System.out.println("________________清空集合___________________");list.clear();System.out.println(list);System.out.println("_____________把集合中的元素存储到数组_________");list.add("hello");list.add("world");list.add("java");String [] arr = list.toArray(new String[0]); //这里是JDK1.8下System.out.println(Arrays.toString(arr)); //输出数组}
}
/*
_________________添加元素_________________
[hello, world, java]
_________________删除元素_________________
[hello, java]
_________判断集合中是否有指定的对象__________
true
false
______________判断集合是否为空______________
false
_______________返回集合的大小_______________
2
________________清空集合___________________
[]
_____________把集合中的元素存储到数组_________
[hello, world, java]
/
2.2 Collection的遍历方式
2.2.1 方式1 迭代器遍历
- 迭代器是用来遍历集合的专用方式(数组没有迭代器),在Java中迭代器代表是Iterator。
- 包路径:
java.util.Iterator- 作用:用于遍历
Collection类型的集合(如List、Set、Queue等)。- 特点:
- 只能单向遍历(从前到后)。
- 支持在遍历过程中安全删除元素。
- 避免
ConcurrentModificationException(如果使用正确)。
Iterator迭代器
Collection集合获取迭代器的方法
| 方法名称 | 说明 |
|---|---|
| Iterator<E> iterator() | 返回集合的迭代器对象,该迭代器对象默认指向当前集合的第一个元素 |
Iterator迭代器中的常用方法
| 方法 | 返回类型 | 说明 |
|---|---|---|
hasNext() | boolean | 询问当前位置是否有元素存在,存在返回true,不存在返回false |
next() | E | 获取当前位置的元素,并同时将迭代器对象执向下一个元素处。 |
remove() | void | 可选操作。从底层集合中移除 next() 方法返回的最后一个元素。此方法只能在每次调用 next() 之后调用一次。如果在没有调用 next() 的情况下调用,或者连续调用两次 remove(),会抛出 IllegalStateException。 |
代码3:迭代器遍历演示
import java.util.ArrayList;
import java.util.Iterator;public class CollectionIteratorDemo4 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();list.add("hello");list.add("world");list.add("java");list.add("kk");Iterator< String> it = list.iterator();while(it.hasNext()){System.out.printf(it.next() + " ");}System.out.println();}
}
/*
hello world java kk */
2.2.2 方法2 增强for循环

代码4:增强for遍历演示
import java.util.ArrayList;
public class CollectionForMaxDemo5 {public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);for (int i: list){System.out.printf("%d ", i);}System.out.println();}
}
/*
1 2 3 4 */
2.2.3 方法3 Lambda表达式

代码5:forEach遍历演示
import java.util.ArrayList;
import java.util.function.Consumer;public class CollectionLambdaDemo6 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("hello");list.add("world");list.add("java");list.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});//Lambda简化list.forEach(s-> System.out.println(s));//方法引用list.forEach(System.out::println);}
}
/*
hello
world
java
hello
world
java
hello
world
java*/
2.2.4 Collection三种遍历方式的区别
认识并发修改异常问题
- 遍历集合的同时又存在增删集合元素的行为时可能出现业务异常,这种现象被称之为并发修改异常问题。

代码6:区别3中种遍历
import java.util.ArrayList;
import java.util.*;public class CollectionTest7 {public static void main(String[] args) {//搞清楚并发修改异常问题ArrayList<String> list = new ArrayList<>();list.add("Java");list.add("宁夏枸杞");list.add("黑枸杞");list.add("枸杞子");list.add("红枸杞");list.add("枸杞");list.add("C++");
// System.out.println(list);
//
//
// for(int i = 0;i < list.size();i++){
// String s = list.get(i);
// if(s.contains("枸杞")){
// list.remove(s);
// }
// }
// System.out.println( list); //发现并不满足要求 [Java, 黑枸杞, 红枸杞, C++]/*解决方案一:前提支持索引删除集合中包含枸杞的元素,倒着遍历能够解决修改异常问题*/ArrayList<String> list2 = new ArrayList<>();list2.add("Java");list2.add("宁夏枸杞");list2.add("黑枸杞");list2.add("枸杞子");list2.add("红枸杞");list2.add("枸杞");list2.add("C++");System.out.println("===================================");for(int i = list2.size() - 1;i >= 0;i--){String s = list2.get(i);if(s.contains("枸杞")){list2.remove(s);}}System.out.println( list2);System.out.println("===================================");/*解决方案二:i--;前提支持索引*/ArrayList<String> list3 = new ArrayList<>();list3.add("Java");list3.add("宁夏枸杞");list3.add("黑枸杞");list3.add("枸杞子");list3.add("红枸杞");list3.add("枸杞");list3.add("C++");for(int i = 0; i< list3.size();i++){if(list3.get(i).contains("枸杞")){list3.remove(i);i--;}}System.out.println( list3);System.out.println("==============使用迭代器=============");/*当集合没有索引的使用方案1:使用迭代器,迭代器遍历并删除也会存在并发修改异常问题可以解决:使用迭代器自己的remove()方法*/ArrayList<String> list4 = new ArrayList<>();list4.add("Java");list4.add("宁夏枸杞");list4.add("黑枸杞");list4.add("枸杞子");list4.add("红枸杞");list4.add("枸杞");list4.add("C++");Iterator< String> it = list4.iterator();while(it.hasNext()){String s = it.next();if(s.contains("枸杞")){it.remove(); //注意:这里的remove()方法是迭代器的方法,不是集合的remove()方法}}System.out.println( list4);System.out.println("===================================");/*使用for 和 Lambda当没有索引的时候,删除集合中包含枸杞的元素不能解决:并发修改异常问题*/ArrayList<String> list5 = new ArrayList<>();list5.add("Java");list5.add("宁夏枸杞");list5.add("黑枸杞");list5.add("人字拖");list5.add("枸杞子");list5.add("红枸杞");list5.add("枸杞");list5.add("C++");
// for(String s : list5){
// if(s.contains("枸杞")){
// list5.remove(s);
// }
// }
// list5.forEach(s->{
// if(s.contains("枸杞")){
// list5.remove(s);
// }
// });
// System.out.println( list5);}
}
/*
===================================
[Java, C++]
===================================
[Java, C++]
==============使用迭代器=============
[Java, C++]
===================================*/
总结:解决并发修改异常问题的方案

Ok关于List和Set集合后期会持续更新。
