目录
遍历方式的适用场景对比
迭代器遍历
列表迭代器
增强for遍历
Lambda表达式
lambda表达式简介
普通for遍历
集合中通用的并且常用的六种方法
迭代器遍历 :在遍历过程中需要删除元素,请使用迭代器
列表迭代器: 在遍历过程中需要添加元素,请使用列表迭代器
增强for遍历: 仅仅需要遍历
lambda表达式:仅仅需要遍历
普通for: 如果便利的时候想操作索引,可以使用普通for
首先定义一个list,之后添加数据到list当中,定义出一个迭代器,之后采用迭代器的next方法进行判断有没有元素,有的话就进行返回当前元素的值,之后在进行移动指针到下一位
public static void main(String[] args) {
List list = new ArrayList<>();
list.add(111);
list.add(222);
list.add(333);
/** 定义一个迭代器
* hasNext方法判断是否有该元素
* next方法 将当前结果返回 并指向下一位
* */
Iterator it = list.iterator();
while (it.hasNext()){
Integer val = it.next();
System.out.println(val);
}
}
如果我在遍历过程中需要删除某个元素,就可以采用下面这种写法,注意要用迭代器提供的remove方法进行删除,不然代码会报异常
public class ListTest {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add(111);
list.add(222);
list.add(333);
/** 定义一个迭代器
* hasNext方法判断是否有该元素
* next方法 将当前结果返回 并指向下一位
* */
Iterator it = list.iterator();
while (it.hasNext()){
Integer val = it.next();
if (val.equals(222)){
it.remove();
}
System.out.println(val);
}
System.out.println(list);
}
}
可以看到输出结构如下图,已经删除了222
需要注意的是,方法遍历时仍然会输出222,因为next方法会先将返回值也就是222传给val,之后才调用的remove方法进行删原list,之后输出的是val的值
当然如果不想要输出要删除的元素,最直接的方法就是加上continue方法
Iterator it = list.iterator();
while (it.hasNext()){
Integer val = it.next();
if (val.equals(222)){
it.remove();
continue;
}
System.out.println(val);
}
这是list格外多出的一种遍历方式
ListIterator it = list.listIterator();
while (it.hasNext()){
Integer val = it.next();
System.out.println(val);
}
他可以对列表进行添加元素,当然也能够删除
ListIterator it = list.listIterator();
while (it.hasNext()){
Integer val = it.next();
if(val.equals(111)){
it.add(444);
}
System.out.println(val);
}
输出结果如下图所示
增强for是在jdk1.5之后出现的,其内部原理就是一个Iterator迭代器
需要注意的是 这种方式只能够遍历list,无法对里面的值就行修改
for (Integer integer : list) {
System.out.println(integer);
}
可以看到我下面这种写法,能不能修改list呢?
for (Integer integer : list) {
integer = 10086;
System.out.println(integer);
}
System.out.println(list);
如果只是要看遍历的输出结果 这个是肯定会有变化的,因为我们是直接修改了integer的值,输出的结果也是它,但是intege只是作为一个第三者出现,它先等于了list原来的值,也就是说 只是让integer中list的值,并不是让它等于list
可以看到输出结果如下:
不能够操作list,但是代码简洁,只需要一行就可以完成
list.forEach(a -> System.out.println(a));
甚至可以缩写成
list.forEach(System.out::println);
Lambda 表达式是 Java 8 引入的一种函数式编程特性,它允许你以一种更简洁的方式表示匿名函数或对象方法的实现。Lambda 表达式的基本语法如下:
(parameters) -> { body }
其中,Lambda 表达式由以下几个部分组成:
参数列表(parameters):这是 Lambda 表达式接受的输入参数列表。你可以指定零个或多个参数,多个参数用逗号分隔。参数的类型可以明确声明,也可以根据上下文进行推导。
箭头符号(->):箭头符号分隔参数列表和 Lambda 表达式的主体。
主体(body):这是 Lambda 表达式的执行逻辑。它可以是一个单独的表达式,或者是一段代码块(用花括号括起来),包含多个语句。
下面是一些使用 Lambda 表达式的示例:
无参数的 Lambda 表达式:
() -> System.out.println("Hello, world!");
有参数的 Lambda 表达式:
(x, y) -> {
int sum = x + y;
System.out.println(sum);
}
有返回值的 Lambda 表达式:
(x, y) -> x + y
方法引用:
System.out::println
这是利用了list的索引就行遍历的方式,但是需要注意的是set是没有索引的,因此要想遍历set就不能用这种方式
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
1.add
list中元素是可以重复的,因此调用add方法 返回值永远是true set中则是不可以重复的,如果添加相同的元素就会返回false
2.clear
这个是将集合清空的方法
3.remove
返回值也是boolean类型的,删除成功返回true 失败返回false
4.contains
判断元素是否包含
底层是依赖equals方法进行判断是否存在的,如果存的是自定对象,这一定要重写equals(在自定义的javaBean中重写equals就行
5.isEmpty
判断集合是否为空
6.size
找到集合的长度