遍历Java中的列表

这篇文章将讨论在 Java 中迭代列表的各种方法。

1.使用 List.toString() 方法

如果我们只是想显示列表的内容,我们可以通过使用 toString() 方法,然后简单地打印出来,如下图:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

import java.util.List;

import java.util.ArrayList;

import java.util.stream.Stream;

class Main

{

// 用于打印 `ArrayList` 的 Java 程序

public static void main(String[] args)

{

List<String> list = new ArrayList<String>();

list.add("C");

list.add("C++");

list.add("Java");

// 1. 使用 `toString()` 打印列表的字符串表示

System.out.println(list.toString());

// 2. Java 8 方式!

Stream.of(list.toString())

.forEach(System.out::println);

}

}

2.使用 ListIterator 或者 Iterator

这 List 接口提供了一个特殊的迭代器,称为 ListIterator,除了正常的操作之外,还允许双向访问 Iterator 接口提供。我们可以打电话 List.listIterator() 得到一个 ListIterator 列表中的元素。我们也可以使用 List.iterator() 返回一个 Iterator.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

import java.util.ArrayList;

import java.util.List;

import java.util.Iterator;

import java.util.ListIterator;

import java.util.Arrays;

class Main

{

// 遍历列表的 Java 程序

public static void main(String[] args)

{

List<String> list = Arrays.asList("C", "C++", "Java");

// 1. 使用 `ListIterator` 遍历列表

ListIterator<String> lItr = list.listIterator();

// 如果列表有更多元素,hasNext() 返回 true

while (lItr.hasNext())

{

// next() 返回迭代中的下一个元素

System.out.println(lItr.next());

}

// 2. 使用迭代器

Iterator<String> itr = list.iterator();

while (itr.hasNext()) {

System.out.println(itr.next());

}

}

}

通用版本:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

import java.util.Arrays;

import java.util.Iterator;

import java.util.List;

import java.util.ListIterator;

class Main

{

// 在 Java 中遍历列表的通用代码

public static <T, C> void IterateUsingIterator(List<T> list,

Class<C> iteratorClass)

{

if (iteratorClass.getSimpleName().equals("ListIterator"))

{

// 使用 `ListIterator` 遍历列表

ListIterator<T> lItr = list.listIterator();

while (lItr.hasNext()) {

System.out.println(lItr.next());

}

}

else if (iteratorClass.getSimpleName().equals("Iterator"))

{

// 使用 `Iterator` 遍历列表

Iterator<T> itr = list.iterator();

while (itr.hasNext()) {

System.out.println(itr.next());

}

}

}

// 遍历列表的 Java 程序

public static void main(String[] args)

{

List<String> list = Arrays.asList("C", "C++", "Java");

// 1. 使用 `ListIterator` 打印列表

IterateUsingIterator(list, ListIterator.class);

// 2. 使用 `Iterator` 打印列表

IterateUsingIterator(list, Iterator.class);

}

}

3.使用for循环/增强for循环

我们知道 list 是一个有序集合,因此我们可以使用 for 循环通过它们在列表中的索引来访问元素。

for 循环还有另一种形式,设计用于通过集合和数组进行迭代,称为增强型 for 循环。我们还可以使用增强的 for 循环来遍历列表。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

import java.util.List;

import java.util.ArrayList;

import java.util.Arrays;

class Main

{

// 遍历列表的 Java 程序

public static void main(String[] args)

{

List<String> list = Arrays.asList("C", "C++", "Java");

// 1. 使用for循环打印列表

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

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

}

// 2. 使用增强的for循环打印列表

for (String s: list) {

System.out.println(s);

}

}

}

下载  运行代码

4. Java 8——使用流和 Lambda

在 Java 8 中,我们可以借助流、lambda 和 forEach 来循环列表。以下程序显示了 4 种方法:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

import java.util.Arrays;

import java.util.List;

import java.util.stream.Stream;

class Main

{

// 遍历列表的 Java 程序

public static void main(String[] args)

{

List<String> list = Arrays.asList("C", "C++", "Java");

// 1. 获取流并使用 lambda 表达式

list.stream().forEach(S -> {

System.out.println(S);

});

// 上面代码的简写

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

// 2. 通过提供方法引用

list.stream().forEach(System.out::println);

// 3. List 从 `Iterable` 接口继承 `forEach()`

list.forEach(System.out::println);

// 4. 使用`Stream.of()`获取`Stream `

Stream.of(list.toArray())

.forEach(System.out::println);

}

}

5. 将列表转换为数组

我们还可以使用将列表转换为数组 List.toArray(T[ ]) 方法,然后使用 for 循环遍历数组或使用打印它 Arrays.toString().还有其他几种实现 toArray() 方法,如下图:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

import com.google.common.collect.FluentIterable;

import com.google.common.collect.Iterables;

import java.util.Arrays;

import java.util.List;

class Main

{

// 遍历列表的 Java 程序

public static void main(String[] args)

{

List<String> list = Arrays.asList("C", "C++", "Java");

// 将列表转换为数组

String[] array = null;

// 1. 使用 `List.toArray(T[])` 方法

array = list.toArray(new String[list.size()]);

System.out.println(Arrays.toString(array));

// 2. `List.toArray(T[])` – 不分配任何内存

array = list.toArray(new String[0]);

System.out.println(Arrays.toString(array));

// 3. 使用 `List.toArray()` 方法

System.out.println(Arrays.toString(list.toArray()));

// 4. Java 8 – 流 + 方法引用

array = list.stream().toArray(String[]::new);

System.out.println(Arrays.toString(array));

// 5. Java 8 – Streams + lambda 表达式

array = list.stream().toArray(n -> new String[n]);

System.out.println(Arrays.toString(array));

// 6. 使用 Guava 库中的 `FluentIterable` 类

array = FluentIterable.from(list).toArray(String.class);

System.out.println(Arrays.toString(array));

// 7. 使用 Guava 库中的 `Iterables` 类

array = Iterables.toArray(list, String.class);

System.out.println(Arrays.toString(array));

}

}

6.使用 Enumeration 界面

最后,我们可以使用已弃用的 枚举 打印列表的界面。该接口提供了枚举向量元素的方法。因此,我们需要先将列表转换为 Vector,然后打印所有 Vector 元素。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

import java.util.*;

class Main

{

// 遍历列表的 Java 程序

public static void main(String[] args)

{

List<String> list = Arrays.asList("C", "C++", "Java");

// 1. 将 `List` 转换为 `Vector`

@Deprecated

Enumeration<String> enumeration = new Vector(list).elements();

// 如果枚举包含更多元素

while (enumeration.hasMoreElements())

{

// 打印枚举的下一个元素

System.out.println(enumeration.nextElement());

}

// 2. `Collections.enumeration()` 返回一个枚举

// 指定集合

enumeration = Collections.enumeration(list);

while (enumeration.hasMoreElements()) {

System.out.println(enumeration.nextElement());

}

}

}

这就是在 Java 中迭代 List 的全部内容

遍历Java中的列表相关推荐

  1. 遍历Java中的列表的方法

    本文翻译自:Ways to iterate over a list in Java Being somewhat new to the Java language I'm trying to fami ...

  2. java中怎样克隆,如何在Java中克隆列表?

    要克隆Java中的列表,最简单的方法是使用ArrayList.clone()方法- 示例import java.util.ArrayList; public class Demo { public s ...

  3. java对列表数据排序_如何在Java中对列表进行排序

    java对列表数据排序 Sometimes we have to sort a list in Java before processing its elements. In this tutoria ...

  4. Java中迭代列表中数据时几种循环写法的效率比较

    Java中经常会用到迭代列表数据的情况,本文针对几种常用的写法进行效率比较.虽然网上已经有了类似的文章,但是对他们的结论并不认同. 常见的实现方法: 1.for循环: [java] view plai ...

  5. java中map怎么遍历,Java中怎么遍历Map的所有的元素

    Java中怎样遍历Map的所有的元素 JDK1.4中 view plaincopy to clipboardprint? Map map = new HashMap(); Iterator it = ...

  6. JAVA中修改顺序表中的元素_在Java中修改列表的每个项目

    小编典典 第二个版本会更好.在内部,它们最后是相同的,但是第二个实际上允许您修改列表,而第一个将引发ConcurrentModificationException. 但是,然后您以错误的方式使用了It ...

  7. java字符串删掉子串_如何从Java中的列表中删除子列表?

    java字符串删掉子串 从列表中删除子列表 (Removing SubList from a List) Suppose, we have a list of few elements like th ...

  8. Java对json遍历_如何遍历Java中的json对象

    我正在尝试遍历json文件并获取所需的详细信息,这是我的json { "000": { "component": "c", "de ...

  9. java 有序列表_关于算法:在Java中为列表列表生成唯一的有序非重复组合

    我知道有很多类似的问题,并且已经阅读了几个小时.但是它们似乎都不符合我的要求. 我有列表列表(list >),列表可以是任何大小. 例: 我的外部列表大小是:4 清单内容 1. list(0) ...

最新文章

  1. 这才是最好的程序语言,不服来辩
  2. [算法]一次商品交易利益最大化
  3. ABAP-AVL-OO方法中的ALV的如何自己添加按钮及其响应
  4. 不知因果,何以谈优化?
  5. spark 获取广播变量_spark使用广播变量
  6. pc控制iphone的软件_哪个备忘录便签app可以和PC电脑一块儿用
  7. AOP和OOP的区别
  8. 使用Windows Server 2003搭建一个asp+access网站
  9. 硬件开发过程简介(一)
  10. 10款在线检查英语语法的网站
  11. 魔王语言解释器C语言,[数据结构]魔王语言解释c语言实现
  12. 115网盘批量转存工具
  13. zend framework 1.5.2 中实现梅花雪1.0树状菜单
  14. 数据挖掘项目之Airbnb 新用户的民宿预定结果预测
  15. 学生HTML游戏网页作业作品——HTML+CSS+JavaScript魔域私服游戏HTML(1个页面)
  16. 【Python】创蓝253云通讯平台国际短信API接口DEMO
  17. 动力锂离子电池电池检测标准和方法
  18. Mac软件序列号查询工具KCNcrew Pack mac
  19. 笔试中怎么答产品设计类题目
  20. 手把手学习Vue3.0:CSS样式基础和HTML5基础收藏

热门文章

  1. TCP 短链接 和 长链接
  2. ID3西瓜决策树python实现
  3. 语音识别(ASR)技术优势都有哪些?
  4. 清华大学立功了!“破冰”芯片核心技术
  5. suricata smtp协议解析源码注释一
  6. 带宽、速率(波特率、比特率)和码元宽度简述
  7. 事务的隔离级别(附Redis的简述)
  8. 由序列确定二叉树:前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 代码实现(c语言)
  9. idea2018版本 整合git不显示代码编辑记录和信息
  10. 5.1 多元线性回归分析