Java集合遍历方式详解

Java集合框架是Java编程语言的核心部分之一。它提供了许多有用的数据结构和算法,用于存储和处理数据。其中,集合框架中的集合类型包括单列集合和双列集合,这些集合类型都提供了不同的遍历方式。本文将详细介绍Java集合遍历方式,并提供大量例子帮助读者更好地理解和掌握这些遍历方式。

1、单列集合遍历方式

List提供了多种遍历方式,包括迭代器遍历、增强for遍历、for Each(Lambda表达式)遍历、普通for循环遍历、stream流遍历。

1.1普通for循环遍历

普通for循环遍历是List最常用的遍历方式之一。它的语法如下:

for(int i = 0; i < list.size(); i++) {

Object obj = list.get(i);

// do something

}

例:

import java.util.ArrayList;

import java.util.List;

public class List {

public static void main(String[] args) {

// 创建一个List集合

List fruits = new ArrayList<>();

fruits.add("Apple");

fruits.add("Banana");

fruits.add("Cherry");

fruits.add("Date");

// 使用for循环遍历List

for (int i = 0; i < fruits.size(); i++) {

System.out.println(fruits.get(i));

}

}

}

1.2 迭代器遍历

迭代器是Java集合框架中的一个重要概念,它提供了一种统一的方法来遍历集合中的元素,而无需暴露集合的内部结构。使用迭代器遍历集合时,你通常会调用集合的iterator()方法来获取一个迭代器实例,然后通过这个迭代器来遍历集合中的元素。 List是一种有序的集合,其中的元素可以重复。它的语法如下:

Iterator iterator = list.iterator();

while(iterator.hasNext()) {

Object obj = iterator.next();

// do something

}

例:

package com.wedu.listlist;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class list {

public static void main(String[] args) {

List fruits = new ArrayList<>();

fruits.add("Apple");

fruits.add("Banana");

fruits.add("Cherry");

fruits.add("Date");

// 获取List的迭代器

Iterator iterator = fruits.iterator();

// 使用迭代器遍历List

while (iterator.hasNext()) {

// 调用next()方法获取下一个元素,并将它赋值给fruit变量

String fruit = iterator.next();

// 对获取到的元素进行操作,这里我们简单地打印它

System.out.println(fruit);

}

}

}

1.3增强for遍历

增强型for循环的语法如下:

for (type variable : collection) {

// 循环体

}

这里,type是集合中元素的类型,variable是每次迭代中当前元素的变量名,collection是要遍历的集合。

例:

import java.util.ArrayList;

import java.util.List;

public class List {

public static void main(String[] args) {

// 创建一个List集合

List fruits = new ArrayList<>();

fruits.add("Apple");

fruits.add("Banana");

fruits.add("Cherry");

fruits.add("Date");

// 使用增强型for循环遍历List

for (String fruit : fruits) {

System.out.println(fruit);

}

}

}

增强型for循环是只读的,意味着你不能在循环体中修改集合中的元素。如果你需要修改元素,应该使用传统的for循环或者迭代器,并且确保在循环体内部正确处理修改操作。

1.4for Each(Lambda表达式)遍历

for Each也是仅仅用来遍历,不能进行其他操作。

package com.wedu.listlist;

import java.util.ArrayList;

import java.util.List;

import java.util.function.Consumer;

public class List1 {

public static void main(String[] args) {

List fruits = new ArrayList<>();

fruits.add("Apple");

fruits.add("Banana");

fruits.add("Cherry");

fruits.add("Date");

//利用Lambda表达式进行遍历

fruits.forEach(new Consumer() {

@Override

public void accept(String s) {

System.out.println(s);

}

});

//简化过程

System.out.println("--------------------------------");

fruits.forEach((String s)-> {

System.out.println(s);

}

);

System.out.println("--------------------------------");

//最终简化成一行代码

fruits.forEach((s)-> System.out.println(s));

}

}

1.5stream流遍历

package com.wedu.listlist;

import java.util.ArrayList;

import java.util.Collections;

public class list {

public static void main(String[] args) {

//单列集合获取stream流

ArrayList list=new ArrayList<>();

Collections.addAll(list,"b","c","d");

list.stream().forEach(s -> System.out.println(s));

}

}

2、双列集合遍历方式

2.1通过键找值

package com.wedu.Map;

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

public class MapDemo1 {

//map集合第一种遍历---通过键找值

public static void main(String[] args) {

//创建map集合对象

Map map=new HashMap<>();

//添加元素

map.put("马克菠萝","瑶");

map.put("伽罗","明世隐");

map.put("后羿","蔡文姬");

//通过键找值遍历

//获取所有的键,把它放在一个单列集合中

Set keys=map.keySet();

//遍历单列集合得到每一个键

for (String key : keys) {

//利用map集合的键获取对应的值

String value=map.get(key);

System.out.println(key+"="+value);

}

}

}

2.2通过键值对对象遍历

package com.wedu.Map;

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

public class MapDemo2 {

//map集合的第二种遍历---通过键值对对象遍历

public static void main(String[] args) {

//创建map集合对象

Map map=new HashMap<>();

//添加元素

map.put("马克菠萝","瑶");

map.put("伽罗","明世隐");

map.put("后羿","蔡文姬");

map.put("公孙离","大乔");

//通过键值对对象遍历

//通过set集合获取所有的键值对对象

Set> entries = map.entrySet();

//遍历entries这个集合去得到里面的每一个键值对对象

for (Map.Entry entry : entries) {

String key=entry.getKey();

String value=entry.getValue();

System.out.println(key+"="+value);

}

}

}

2.3利用Lambda表达式进行遍历

package com.wedu.Map;

import java.util.HashMap;

import java.util.Map;

import java.util.function.BiConsumer;

public class MapDemo3 {

//map集合的第三种遍历---Lambda表达式

public static void main(String[] args) {

//创建map集合对象

Map map=new HashMap<>();

//添加元素

map.put("马克菠萝","瑶");

map.put("伽罗","明世隐");

map.put("后羿","蔡文姬");

map.put("公孙离","大乔");

map.put("孙尚香","太乙真人");

//利用Lambda表达式进行遍历

map.forEach(new BiConsumer() {

@Override

public void accept(String key, String value) {

System.out.println(key+"="+value);

}

});

System.out.println("-----------------------------------");

map.forEach((String key, String value)-> {

System.out.println(key+"="+value);

}

);

System.out.println("-----------------------------------");

map.forEach(( key, value)-> System.out.println(key+"="+value));

}

}

2.4stream流遍历

package com.stream;

import java.util.HashMap;

public class StreamDemo2 {

public static void main(String[] args) {

//双列集合获取stream流

HashMap hm=new HashMap<>();

hm.put("aaa",111);

hm.put("bbb",222);

hm.put("ccc",333);

hm.put("ddd",444);

//第一种获取stream流

//hm.keySet().stream().forEach(s -> System.out.println(s));

//第二种获取stream流

hm.entrySet().stream().forEach(s->System.out.println(s));

}

}

Copyright © 2088 世界杯亚洲区积分榜_c罗世界杯 - snslf.com All Rights Reserved.
友情链接