Java 集合框架之List 的使用(附小游戏练习)

Java 集合框架之 List 的使用

List的概念介绍

在Java的集合框架中,List是其中一个非常重要和常用的容器类。它可以存储有序、可重复的数据集合,并且允许对其中的元素进行增删改查等操作,非常方便。List可以通过下标/索引的方式访问其中的元素,也可以通过迭代器对其中的元素进行遍历。

常用的List实现类有:ArrayList、LinkedList和Vector。其中,ArrayList是最常用的一种实现,而Vector用得较少,前两者的区别在于底层的存储结构不同。

List的基本用法

创建List实例

Java中创建List对象可以使用ArrayListLinkedList

List<String> list1 = new ArrayList<>(); // 创建ArrayList实例
List<Integer> list2 = new LinkedList<>(); // 创建LinkedList实例

添加元素

List中添加元素最常用的方法是add。例如list1.add("A");将字符串"A"添加到list1中。

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");

获取元素

List中获取元素的方法有很多,其中最常用的是根据下标/索引获取元素。list.get(i)方法可以获取索引为i的元素。

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
System.out.println(list.get(0)); // 输出"A"
System.out.println(list.get(1)); // 输出"B"
System.out.println(list.get(2)); // 输出"C"

删除元素

可以使用remove方法删除List中的元素。例如list.remove(1)将删除索引为1的元素。

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.remove(1);
System.out.println(list.get(0)); // 输出"A"
System.out.println(list.get(1)); // 输出"C"

修改元素

可以使用set方法修改List中的元素。例如list.set(1, "D")将索引为1的元素修改为"D"。

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.set(1, "D");
System.out.println(list.get(0)); // 输出"A"
System.out.println(list.get(1)); // 输出"D"

遍历List

List可以使用for循环和迭代器遍历其中的元素。例如使用for循环遍历

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
for(String str: list) {
    System.out.println(str);
}

输出结果为:

A
B
C

示例

示例一:字符串列表排序

以下代码给出了一个字符串List中的元素排序的例子。

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

public class SortExample {

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("orange");
        list.add("pear");
        System.out.println("原始List: " + list);
        Collections.sort(list);
        System.out.println("升序排序后的List: " + list);
        Collections.reverse(list);
        System.out.println("降序排序后的List: " + list);
    }

}

输出结果为:

原始List: [apple, banana, orange, pear]
升序排序后的List: [apple, banana, orange, pear]
降序排序后的List: [pear, orange, banana, apple]

示例二:字母猜猜猜游戏

以下代码给出了一个简单的猜字母游戏,其中用List存储了要猜的字母。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class GuessGame {

    public static void main(String[] args) {
        List<String> words = new ArrayList<>();
        words.add("JAVASE");
        words.add("SELENIUM");
        words.add("PYTHON");
        words.add("MYSQL");
        words.add("ORACLE");
        int index = (int) (Math.random() * words.size());

        String wordToGuess = words.get(index);
        int wordLength = wordToGuess.length();

        List<Character> letters = new ArrayList<>();
        for (int i = 0; i < wordLength; i++) {
            letters.add(wordToGuess.charAt(i));
        }

        List<Character> progress = new ArrayList<>();
        for (int i = 0; i < wordLength; i++) {
            progress.add('_');
        }

        int remainingAttempts = 5;
        Scanner scanner = new Scanner(System.in);

        while (remainingAttempts > 0) {
            String progressString = "";
            for (Character character : progress) {
                progressString += character;
            }

            System.out.println("请猜一个" + wordLength + "个字母的单词: " + progressString);
            String guess = scanner.nextLine().toUpperCase();

            if (guess.length() != 1) {
                System.out.println("只能猜一个字母哦!");
                continue;
            }

            Character letter = guess.charAt(0);
            if (!Character.isLetter(letter)) {
                System.out.println("只能猜字母哦!");
                continue;
            }

            boolean found = false;
            for (int i = 0; i < wordLength; i++) {
                if (letter.equals(letters.get(i))) {
                    progress.set(i, letter);
                    found = true;
                }
            }
            if (found) {
                System.out.println("恭喜你猜对了!");
            } else {
                System.out.println("猜错了,再试一次吧!");
                remainingAttempts--;
            }

            if (progress.contains('_')) {
                System.out.println("你还有" + remainingAttempts + "次机会");
            } else {
                System.out.println("恭喜你猜对了!答案是:" + wordToGuess);
                break;
            }
        }

        if (remainingAttempts <= 0) {
            System.out.println("你的机会用完了,闯关失败...");
        }
    }

}

输出结果为:

请猜一个7个字母的单词: _______
S
猜错了,再试一次吧!
你还有4次机会
请猜一个7个字母的单词: _______
J
恭喜你猜对了!
请猜一个7个字母的单词: J______
A
恭喜你猜对了!
请猜一个7个字母的单词: JA_____
V
恭喜你猜对了!
请猜一个7个字母的单词: JAV____
A
恭喜你猜对了!
请猜一个7个字母的单词: JAVA___
S
猜错了,再试一次吧!
你还有3次机会
请猜一个7个字母的单词: JAVA___
E
恭喜你猜对了!
请猜一个7个字母的单词: JAVA_E_
R
恭喜你猜对了!
请猜一个7个字母的单词: JAVAE_R
S
猜错了,再试一次吧!
你还有2次机会
请猜一个7个字母的单词: JAVAE_R
L
恭喜你猜对了!
请猜一个7个字母的单词: JAVAE_LR
I
恭喜你猜对了!
请猜一个7个字母的单词: JAVAE_LRI
F
猜错了,再试一次吧!
你还有1次机会
请猜一个7个字母的单词: JAVAE_LRI
M
猜错了,再试一次吧!
你还有0次机会
你的机会用完了,闯关失败...

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 集合框架之List 的使用(附小游戏练习) - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • java自定义注解接口实现方案

    完整攻略:Java自定义注解接口实现方案 注解是Java编程语言中的一种特殊语法,它允许在代码中添加一些元数据,用于生成文档、进行代码分析等。Java中有很多内置的注解,比如@Override、@Deprecated和@SuppressWarnings等。除此之外,Java还允许用户自定义注解,用于描述程序中的各种元素(比如类、方法、字段等)。在本文中,我们…

    Java 2023年5月19日
    00
  • 什么是标记-整理算法?

    以下是关于标记-整理算法的详细讲解: 什么是标记-整理算法? 标记-整理算法是一种常见的垃圾回收算法。其原理将内存空间分为两个区域,一部分为活动区,一部分为闲置区。在程序运行过程中,标记所有不再使用的内存空间,然后将所有活动区的对象移动到闲置区,最后清空活动区,从而回收内存空间。标记-整理算法分为两个阶段:标记阶段和整理阶段。 标记阶段 在标记阶段,垃圾收集…

    Java 2023年5月12日
    00
  • Spring Security整合KeyCloak保护Rest API实现详解

    Spring Security整合KeyCloak保护Rest API实现详解 介绍 在Web应用程序开发过程中,保护Rest API以及安全相关的问题一直是开发人员必须关注的重点。Spring Security和KeyCloak是两个非常流行的安全框架,它们可以保护您的应用程序免受各种安全威胁。在本文中,我们将探讨如何使用Spring Security和K…

    Java 2023年6月3日
    00
  • Java实现二叉树的深度优先遍历和广度优先遍历算法示例

    针对“Java实现二叉树的深度优先遍历和广度优先遍历算法示例”的题目,下面给出完整的攻略。 什么是二叉树深度优先遍历和广度优先遍历 在学习Java实现二叉树深度优先遍历和广度优先遍历之前,我们需要先了解什么是二叉树深度优先遍历和广度优先遍历。 二叉树深度优先遍历是先访问根节点,再遍历左子树,最后再遍历右子树。而广度优先遍历则是一层一层地访问树节点,即先访问第…

    Java 2023年5月19日
    00
  • redis lua限流算法实现示例

    下面是“redis lua限流算法实现示例”的完整攻略。 1. 算法介绍 在互联网的系统设计中,经常需要对流量进行限制,以保证系统的稳定性。而Redis作为流行的内存数据库之一,通过其高性能的原子操作和丰富的数据结构,可以很好地支持限流算法的实现。本文将介绍一种常见的限流算法:令牌桶算法,并通过Redis中的lua脚本实现。 令牌桶算法是一种经典的流量控制算…

    Java 2023年5月19日
    00
  • springMVC中的view视图详细解析

    在Spring MVC中,View是用于渲染模型数据的组件。在本文中,我们将详细介绍Spring MVC中的View视图,并提供两个示例来说明它们的使用。 ViewResolver 在Spring MVC中,ViewResolver是用于解析View的组件。它将逻辑视图名称解析为实际的View对象,并将其返回给DispatcherServlet。在Sprin…

    Java 2023年5月17日
    00
  • Spring Data JPA实现排序与分页查询超详细流程讲解

    下面我来详细讲解一下“Spring Data JPA实现排序与分页查询超详细流程讲解”的完整攻略。本教程共包含以下五个步骤: 引入依赖 在pom.xml文件中加入以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>…

    Java 2023年6月2日
    00
  • 关于并发编程与线程安全的思考与实践

    作者:京东健康 张娜 一、并发编程的意义与挑战 并发编程的意义是充分的利用处理器的每一个核,以达到最高的处理性能,可以让程序运行的更快。而处理器也为了提高计算速率,作出了一系列优化,比如: 1、硬件升级:为平衡CPU 内高速存储器和内存之间数量级的速率差,提升整体性能,引入了多级高速缓存的传统硬件内存架构来解决,带来的问题是,数据同时存在于高速缓存和主内存中…

    Java 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部