Java如何随机获取List中的元素?实现代码一次搞定!

news/2024/12/29 3:25:12/

推荐阅读

AI文本 OCR识别最佳实践

AI Gamma一键生成PPT工具直达链接

玩转cloud Studio 在线编码神器

玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间

资源分享

AI绘画 stable diffusion Midjourney 官方GPT文档 AIGC百科全书资料收集

史上最全文档AI绘画stablediffusion资料分享

AI绘画关于SD,MJ,GPT,SDXL百科全书

「java、python面试题」来自UC网盘app分享,打开手机app,额外获得1T空间
https://drive.uc.cn/s/2aeb6c2dcedd4
AIGC资料包
https://drive.uc.cn/s/6077fc42116d4
https://pan.xunlei.com/s/VN_qC7kwpKFgKLto4KgP4Do_A1?pwd=7kbv#

引言
在Java开发中,我们经常会遇到从
一个List中随机获取元素的需求。可能是需要随机展示广告、抽奖活动、随机推荐等场景。本文将介绍几种简单而高效的方法来实现这个功能,并给出相应的代码示例。
方法一:使用Random类
我们可以利用java.util.Random类来生成一个随机索引,然后根据该索引从List中获取对应的元素。下面是使用Random类实现随机获取元素的示例代码:
import java.util.List;
import java.util.Random;

public class RandomElementSelector {

public static <T> T getRandomElement(List<T> list) {if (list == null || list.isEmpty()) {throw new IllegalArgumentException("List cannot be null or empty");}Random random = new Random();int index = random.nextInt(list.size());return list.get(index);
}public static void main(String[] args) {List<String> fruits = List.of("apple", "banana", "orange", "grape", "watermelon");String randomFruit = getRandomElement(fruits);System.out.println("Randomly selected fruit: " + randomFruit);
}

}
以上代码首先检查了传入的List是否为空或者为null,如果是,则抛出异常。接着,我们创建一个java.util.Random对象,并使用nextInt()方法生成一个介于0到List大小之间(不包括List大小)的随机索引。最后,通过get()方法获取对应索引的元素。
这种方法简单直接,适用于大多数场景。
方法二:使用ThreadLocalRandom类
从Java 7开始,我们可以使用更高效的java.util.concurrent.ThreadLocalRandom类来生成随机数。这个类使用了线程本地变量,避免了多线程竞争情况下的性能问题。下面是使用ThreadLocalRandom类实现随机获取元素的示例代码:
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;

public class RandomElementSelector {

public static <T> T getRandomElement(List<T> list) {if (list == null || list.isEmpty()) {throw new IllegalArgumentException("List cannot be null or empty");}int index = ThreadLocalRandom.current().nextInt(list.size());return list.get(index);
}public static void main(String[] args) {List<String> fruits = List.of("apple", "banana", "orange", "grape", "watermelon");String randomFruit = getRandomElement(fruits);System.out.println("Randomly selected fruit: " + randomFruit);
}

}
这段代码与前面的示例非常相似,只是使用了ThreadLocalRandom.current().nextInt()方法来生成随机索引。
方法三:使用Collections.shuffle()方法
如果我们不关心每次获取元素时的顺序,而只是想随机排列整个List,然后按照顺序遍历,我们可以使用java.util.Collections.shuffle()方法。这个方法将会随机打乱List中的元素顺序。
以下是使用Collections.shuffle()方法实现随机获取元素的示例代码:
import java.util.Collections;
import java.util.List;

public class RandomElementSelector {

public static <T> T getRandomElement(List<T> list) {if (list == null || list.isEmpty()) {throw new IllegalArgumentException("List cannot be null or empty");}Collections.shuffle(list);return list.get(0);
}public static void main(String[] args) {List<String> fruits = List.of("apple", "banana", "orange", "grape", "watermelon");String randomFruit = getRandomElement(fruits);System.out.println("Randomly selected fruit: " + randomFruit);
}

}
以上代码通过调用Collections.shuffle()方法来打乱List的元素顺序,然后直接返回第一个元素。


http://www.ppmy.cn/news/1075204.html

相关文章

高频面试题:如何分别用三种姿势实现三个线程交替打印0到100

最近面试遇到的一道题&#xff0c;需要三个线程交替打印0-100&#xff0c;当时对多线程并不是很熟悉因此没怎么写出来&#xff0c;网上搜了之后得到现 synchronized wait/notifyAll 实现思路&#xff1a;判断当前打印数字和线程数的取余&#xff0c;不等于当前线程则处于等待…

ue5 c++ interface 接口

https://docs.unrealengine.com/5.2/en-US/interfaces-in-unreal-engine/ 1 纯c 接口 没有ufunction #pragma once#include "CoreMinimal.h" #include "UObject/Interface.h" #include "ALWorldWeatherConfig.h" #include "AL_WeatherInt…

面试系列-Springboot 自定义starter使用详解

Spring Boot是一个用于快速构建基于Spring框架的应用程序的工具。它通过提供预配置的默认设置和开箱即用的特性,简化了Spring应用程序的开发流程。其中,Spring Boot Starter是一种通过提供一组预配置的依赖项来简化特定功能开发的机制。 Spring Boot Starter提供了一种方便的…

设计模式的使用——模板方法模式+动态代理模式

一、需求介绍 现有自己写的的一套审批流程逻辑&#xff0c;由于代码重构&#xff0c;需要把以前的很多业务加上审批的功能&#xff0c;再执行完审批与原有业务之后&#xff0c;生成一个任务&#xff0c;然后再统一处理一个任务&#xff08;本来是通过数据库作业去处理的&#x…

vector的OJ题

vector的OJ题 1、只出现一次的数字(异或)2、杨辉三角形 1、只出现一次的数字(异或) //1、只出现一次的数字(异或) // 给定一个非空整数数组&#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现一次的元素。class Solution { public:in…

CA证书颁发机构服务器

目录 一、CA证书颁发机构是什么&#xff1f; 二、数字证书可以干什么&#xff1f; 三、PKI&#xff1a;即公钥加密体系&#xff08;public key cryptography&#xff09; 四、CA在网络中的工作流程及原理&#xff08;以网站为例&#xff09; 五、HTTPS 的工作原理 六、CA私有证…

MySQL高阶查询语句

一、常用查询 1、按关键字排序 使用 select 语句可以将需要的数据从 MySQL 数据库中查询出来&#xff0c;如果对查询的结果进行排序&#xff0c;可以使用 order by语句来对语句实现排序&#xff0c;并最终将排序后的结果返回给用户。这个语句的排序不光可以针对某一个字段&am…

问道管理:“出海”势头强劲 A股公司半年报彰显中国制造全球竞争力

“出海”是2023年我国企业开展的关键词之一。从国内企业组团出海抢订单&#xff0c;到我国出口“新三样”&#xff0c;上半年的多项经济热门、亮点均与出海相关。 上市公司2023年半年报亦折射企业出海的积极改变。Choice数据显示&#xff0c;到记者发稿时已披露半年报的4566家…