JAVA005【迭代器、数据结构、List集合、List接口、Set接口】

本文详细讲解了Java中的Iterator迭代器,如何使用它遍历集合,并注意使用事项。此外,还介绍了增强for循环遍历数组,斗地主游戏的实现,以及常见数据结构如栈、队列、数组、链表和红黑树的特点。深入探讨了List集合,包括ArrayList、LinkedList和Vector的特性。接着,转向Set接口,重点讨论了HashSet和LinkedHashSet,强调了哈希值在存储过程中的作用以及如何重写equals和hashCode方法。最后,对集合操作进行了总结,明确了各种数据结构和集合的优势。
摘要由CSDN通过智能技术生成

1.Iterator迭代器

1.1使用迭代器对集合进行遍历
/**
    目标:能够使用迭代器对集合进行遍历

    讲解:
        1. 什么是迭代器
            迭代:遍历
            一个实现了Iterator接口用来遍历集合的对象

        2. 为什么要使用迭代器
            不同体系的集合特点不一样
            * List接口有索引,我们可以通过for循环+get方法来获取数据,
            * Set接口没有索引的,不能通过for循环+get方法获取数据。
            * 迭代器是一种通用的集合遍历方式

        3. 迭代器的好处
            * 屏蔽了众多集合的内部实现细节,对外提供一种统一的遍历方式
            * 任何单列集合都可以使用迭代器遍历

        4. 如何获取迭代器
            * 调用集合对象的方法获得,该方法如下:
                *  Iterator<E> iterator()  获得迭代器对象

        5. 迭代器的常用方法
             * boolean hasNext()
             * E next()

        6. 迭代器的使用步骤
            * 调用集合对象的iterator()获得迭代器对象
            * 调用迭代器对象的方法进行遍历

    小结:
        1. 迭代器使用步骤
            * 调用集合对象的iterator()获得迭代器对象
            * 调用迭代器对象的方法进行遍历
 */

package com.itheima._01迭代器使用;

import java.util.ArrayList;
import java.util.Iterator;

// 使用迭代器遍历集合:循环改进
public class Demo011 {
   
    public static void main(String[] args) {
   
        // 创建集合对象
        ArrayList<String> list = new ArrayList<>();
        // 添加元素
        list.add("孙悟空");
        list.add("猪八戒");
        list.add("白骨精");
        // 迭代器遍历集合
        Iterator<String> it = list.iterator();
        // 使用while循环遍历
        while(it.hasNext()){
   
            System.out.println(it.next());
        }
    }
}

理解迭代器使用注意事项
package com.itheima._02迭代器原理;

import java.util.ArrayList;
import java.util.Iterator;

/**
    目标:理解迭代器使用注意事项

    讲解:
        1. 了解并发修改异常(注意即可,一般工作中不会有这种需求)
            * java.util.ConcurrentModificationException:并发修改异常
            * 在使用迭代器遍历集合的过程中对集合元素进行了增删操作,则会出现并发修改异常。

        2. hasNext和next方法必须成对:一次hasNext对应一次next方法

        3. 如果集合中没有元素可迭代了仍然调用next方法,则会出现:没有元素异常。

    小结:
        1. 什么时候会出现并发修改异常?
            使用迭代器遍历集合过程中对集合元素增删操作

        2. 当集合遍历完毕之后还调用next方法会出现什么异常?
            没有元素异常

 */
public class Demo022 {
   
    public static void main(String[] args) {
   
        // 创建集合对象
        ArrayList<String> list = new ArrayList<>();

        // 添加元素
        list.add("孙悟空");
        list.add("猪八戒");
        list.add("白骨精");
        list.add("小白龙");

        // 获得迭代器对象
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
   
            // 获得当前遍历元素
            String str = it.next(); // 孙悟空 白骨精
            if (str.equals("猪八戒")){
   
                // 添加沙僧
                // list.add("沙僧");
            }
            System.out.println(str); // 猪八戒 小白龙
        }
    }
}

2.增强for遍历数组

  • iter 快捷键
package com.itheima._02迭代器原理;

import java.util.ArrayList;

/**
    目标:掌握增强for的作用和格式

    讲解:
        1. 增强for的作用:
            JDK1.5新特性
            专门用来遍历集合和数组
            本质:就是迭代器

        2. 增强for的格式:
            for(数据类型 变量名:数组名或集合名){

            }
    小结:
        增强for的作用:遍历数组和集合
        增强for的格式:for(数据类型 变量名:数组或集合){}
 */
public class Demo023 {
   
    public static void main(String[] args) {
   
        test01();
        // test02();
    }

    /**
     * 增强for遍历集合
     */
    private static void test02() {
   
        // 创建集合对象
        ArrayList<String> list = new ArrayList<>();
        // 添加元素
        list.add("孙悟空");
        list.add("猪八戒");
        list.add("白骨精");
        list.add("小白龙");
        // 使用增强for
        for (String s : list) {
   
            System.out.println(s);
        }
    }

    /**
     * 增强for遍历数组
     */
    private static void test01() {
   
        int[] arr = {
   1,2,3,4,5};
        // 使用增强for
        /*
            for(数据类型 变量名:数组名或集合名){

            }
         */
        for(int num:arr){
   
            num++;
            System.out.println(num);
        }

        for (int i : arr) {
   
            System.out.println(i);
        }
    }
}

3.斗地主

package com.itheima._03斗地主案例;

import java.util.ArrayList;
import java.util.Collections;

/**
 * 斗地主案例效果演示
 */
public class Demo031 {
   
    public static void main(String[] args){
   
        // 定义集合保存牌
        ArrayList<Poker> pokers = new ArrayList<Poker>();
        // 添加大小王
        pokers.add(new Poker("大王", ""));
        pokers.add(new Poker("小王", ""));

        // 定义花色数组
        String[] colors = {
   "♠", "♥", "♣", "♦"};
        // 定义牌号数组
        String[] numbers = {
   "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};

        for (String number : numbers) {
   
            // 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值