法一:使用Iterator(迭代器)

  1. Iterator对象称为迭代器,主要用于遍历Collection集合中的元素。
  2. 所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了lterator接口的对象,即可以返回一个迭代器。
  3. Iterator的结构。
  4. Iterator仅用于遍历集合, Iterator本身并不存放对象。

注意:
在调用iterator.next()方法之前必须要调用iterator.hasNext()进行检测。若不调用,且下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常。

  1. package test;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.Iterator;
  5. public class CollectionIterator {
  6. @SuppressWarnings({"all"})
  7. public static void main(String[] args) {
  8. Collection col = new ArrayList();
  9. col.add(new Book("三国演义", "罗贯中", 10.1));
  10. col.add(new Book("小李飞刀", "古龙", 5.1));
  11. col.add(new Book("红楼梦", "曹雪芹", 34.6));
  12. //System.out.println("col=" + col);
  13. //现在希望能够遍历 col集合
  14. //1. 先得到 col 对应的 迭代器
  15. Iterator iterator = col.iterator();
  16. //2. 使用while循环遍历
  17. // while (iterator.hasNext()) {//判断是否还有数据
  18. // //返回下一个元素,类型是Object
  19. // Object obj = iterator.next();
  20. // System.out.println("obj=" + obj);
  21. // }
  22. //快捷键,快速生成 while => itit
  23. //显示所有的快捷键的的快捷键 ctrl + j
  24. while (iterator.hasNext()) {
  25. //返回下一个元素,类型是Object
  26. Object obj = iterator.next();
  27. System.out.println("obj=" + obj);
  28. }
  29. //3. 当退出while循环后 , 这时iterator迭代器,指向最后的元素
  30. // iterator.next();//NoSuchElementException
  31. //4. 如果希望再次遍历,需要重置我们的迭代器
  32. iterator = col.iterator();
  33. System.out.println("===第二次遍历===");
  34. while (iterator.hasNext()) {
  35. Object obj = iterator.next();
  36. System.out.println("obj=" + obj);
  37. }
  38. }
  39. }
  40. class Book {
  41. private String name;
  42. private String author;
  43. private double price;
  44. public Book(String name, String author, double price) {
  45. this.name = name;
  46. this.author = author;
  47. this.price = price;
  48. }
  49. public String getName() {
  50. return name;
  51. }
  52. public void setName(String name) {
  53. this.name = name;
  54. }
  55. public String getAuthor() {
  56. return author;
  57. }
  58. public void setAuthor(String author) {
  59. this.author = author;
  60. }
  61. public double getPrice() {
  62. return price;
  63. }
  64. public void setPrice(double price) {
  65. this.price = price;
  66. }
  67. @Override
  68. public String toString() {
  69. return "Book{" +
  70. "name='" + name + '\'' +
  71. ", author='" + author + '\'' +
  72. ", price=" + price +
  73. '}';
  74. }
  75. }

image.png

法二:增强for循环

增强for循环,可以代替iterator迭代器,特点:增强for就是简化版的iterator,本质一样。只能用于遍历集合或数组。

  • 基本语法

    for(Object object : col){ System.out.println(Object); }

  1. package test;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. public class CollectionFor {
  5. @SuppressWarnings({"all"})
  6. public static void main(String[] args) {
  7. Collection col = new ArrayList();
  8. col.add(new Book("三国演义", "罗贯中", 10.1));
  9. col.add(new Book("小李飞刀", "古龙", 5.1));
  10. col.add(new Book("红楼梦", "曹雪芹", 34.6));
  11. //1. 使用增强for, 在Collection集合
  12. //2. 增强for, 底层仍然是迭代器
  13. //3. 增强for可以理解成就是简化版本的 迭代器遍历
  14. //4. 快捷键方式 I
  15. // for (Object book : col) {
  16. // System.out.println("book=" + book);
  17. // }
  18. for (Object o : col) {
  19. System.out.println("book=" + o);
  20. }
  21. //增强for,也可以直接在数组使用
  22. int[] nums = {1, 8, 10, 90};
  23. for (int i : nums) {
  24. System.out.println("i=" + i);
  25. }
  26. }
  27. }

image.png