在Java中防止重复的ID条目

在Java中防止重复的ID条目,java,arraylist,compare,Java,Arraylist,Compare,我在书类中设置了一个构造函数,在另一个类中设置了书类型的数组列表。该书预计将获得标题,作者,图书ID,副本,时间借阅,在线 我正在寻找最有效的方法来确保在添加书籍之前没有重复的bookID。我还没有学习过Map等,所以现在我想避免这样做。我正在考虑在添加之前使用for循环来检查bookID的 下面是我的addBook方法: // Adding a book to ArrayList public void addBook(){ System.out.println("======

我在
类中设置了一个构造函数,在另一个类中设置了
类型的数组列表。该书预计将获得
标题
作者
图书ID
副本
时间借阅
在线

我正在寻找最有效的方法来确保在添加书籍之前没有重复的
bookID
。我还没有学习过
Map
等,所以现在我想避免这样做。我正在考虑在添加之前使用for循环来检查
bookID的

下面是我的addBook方法:

    // Adding a book to ArrayList
public void addBook(){
    System.out.println("==============================");
    // Getting user input and assigns it to variables
    System.out.print("Enter a title: ");
    String title = sc.nextLine();
    System.out.print("Enter an author: ");
    String author = sc.nextLine();
    System.out.print("Enter quantity of books: ");
    int quantity = checkInput(sc); // checks for valid integer

    // Generates random ID for book
    int bookID = (int) Math.round(Math.random() * 1000000);

    // Adding book the the ArrayList, using user input taken above
    newBook.add(new Book(title, author, bookID, quantity, 0, false));

    // Adding to maxReturns for returnBook()
    maxReturns.add(quantity);

    // Testing that it has added - TAKE OUT AFTER COMPLETION
    for(int i = 0; i < newBook.size(); i++){
        System.out.println(newBook.get(i).getBookID() + " " + newBook.get(i).getTitle());
    }

    // Showing its been added
    System.out.println("Book has been added!"); 
    System.out.println("==============================");
}
//向ArrayList添加一本书
公共无效地址簿(){
System.out.println(“====================================================”);
//获取用户输入并将其分配给变量
System.out.print(“输入标题:”);
字符串title=sc.nextLine();
System.out.print(“输入作者:”);
字符串author=sc.nextLine();
系统输出打印(“输入图书数量:”);
int quantity=checkInput(sc);//检查有效整数
//生成书籍的随机ID
int bookID=(int)Math.round(Math.random()*1000000);
//使用上面的用户输入在ArrayList中添加图书
添加(新书(标题、作者、图书ID、数量、0、false));
//为returnBook()添加到maxReturns
maxReturns.add(数量);
//已添加的测试-完成后取出
对于(int i=0;i
我还建议使用一个映射,但是如果您想使用ArrayList,您应该认为ArrayList实现了List接口,该接口有一个contains方法。因此,您可以查询ArrayList是否包含新书。contains方法随后将使用equals方法在ArrayList中循环,以检查每本书是否与要比较的新书相同。(正确地)以安全的方式重写您的书的哈希代码是个好主意。

为什么不使用Map?@StefanBeike我还没有学习Map等,所以现在想避免这种情况。您不能实现一个名为getBookById的方法,并使用该id查看是否返回任何内容吗。如果返回,则生成新ID,如果没有,则使用该ID。因此,您拒绝学习能够准确解决问题的简单数据结构?如果不使用映射,则可以保留另一个保存书籍ID的ArrayList。在添加书籍之前,请执行一个
包含(newBookId)
的操作,如果没有,则可以安全地将其添加到两个数组中。