java - 如何通过 Java 中的随机过程生成对象的唯一值
问题描述
我想通过随机生成电影对象的唯一值。我写了一个代码片段,但我不确定所有值都不能通过使用Random()
.
我怎样才能通过这个过程来产生所有这些独特的价值?
这是我的代码片段,如下所示。
private static ArrayList<Movie> addMovies(ArrayList<Movie> movieList) {
for(int i=0;i<20;i++) {
Movie movie = new Movie();
movie.setId(defineMovieId());
movie.setTitle(defineMovieName(15));
movieList.add(movie);
}
return movieList;
}
public static String defineMovieName(int n) {
// chose a Character random from this String
String AlphaNumericString = "ABCÇDEFGHIİJKLMNOÖPQRSŞTUÜVWXYZ"
+ "abcçdefghıijklmnoöpqrsştuüvxyz";
StringBuilder sb = new StringBuilder(n);
for (int i = 0; i < n; i++) {
int index
= (int)(AlphaNumericString.length()
* Math.random());
sb.append(AlphaNumericString
.charAt(index));
}
return sb.toString();
}
public static long defineMovieId() {
int max = 1000;
int min = 1;
int range = max - min + 1;
int res = (int) ( Math.random()*range) + min;
return res;
}
解决方案
您定义的方法不保证随机 ID 或随机名称。对于保证唯一值,您可以执行以下操作:
- 对于唯一 ID:创建类型
static
变量AtomicLong
并使用 getAndIncrement() 对于唯一名称:使用UUID.randomUUID()
演示:
import java.util.UUID; import java.util.concurrent.atomic.AtomicLong; public class Main { static final long INITIAL_VALUE = 1000000; static AtomicLong atomicLong = new AtomicLong(INITIAL_VALUE); public static void main(String[] args) { // Tests System.out.println("10 random IDs:"); for (int i = 1; i <= 10; i++) { System.out.print(defineMovieId() + " "); } System.out.println(); System.out.println("10 random movie names:"); for (int i = 1; i <= 10; i++) { System.out.print(defineMovieName() + " "); } } public static long defineMovieId() { return atomicLong.getAndIncrement(); } public static String defineMovieName() { return UUID.randomUUID().toString().replace("-", ""); } }
输出:
10 random IDs: 1000000 1000001 1000002 1000003 1000004 1000005 1000006 1000007 1000008 1000009 10 random movie names: 0c77d209fb624415af7100c3184b35a6 1262e50b680f4a738a607ff757f2b510 7b93c73d93b34db88fc99d1096c1ce84 cbb9c6c90fb8489dbd9c52d4ebdc2ca3 9ba1d409b32b4c55a7562d714aadc220 ec40b647f33a4fc6becc8c5741eb8bf7 c1fbb7bb77d1417c86c2064039f62dec 82b52fdae1d24602b5ee9becd73ba3ce 2d82d481282b4684b55c168e9d216f36 27b02bf63b054d32a0e43992a5fcb124
推荐阅读
- macos - 使用 SwiftUI 在 macOS 中设置 SidebarView 的宽度
- git - 合并后的分支怎么办?
- mysql - 如何在 MySQLWorkbench 中查看 Schemas
- c# - 我从未见过的奇怪的变量结构,
- angular - Rxjs/Typescript:ExpressionChangedAfterItHasBeenCheckedError
- intellij-idea - 箭头键、删除和双击在 IDEA 中不起作用
- python - 如何使用python并行化sql插入?
- docusignapi - Docusign 信封自定义字段 - 验证
- php - 在php中运行两个标头?
- javascript - 显示更多/显示更少 在 Elemenor 中的某个部分上切换