【问题标题】:Search an element in Arraylist where it's contains some element在 Arraylist 中搜索包含某个元素的元素
【发布时间】:2026-01-26 07:40:01
【问题描述】:

我需要帮助。你能给我解决方案如何修复我的代码吗? 我有一个数组列表,其中每个都包含一些元素。而我想用搜索的方法通过一个元素关键字找到它。

这是要添加的代码

System.out.print("ID_Cargo >> ");
ID_Cargo=scan.next();
System.out.print("No_Container >> ");
No_Container=scan.next();
CARGO.add(new CARGO(ID_Cargo,No_Container));

这是搜索

String find;
System.out.println("ID Cargo : ");
find=scan.next();
if(CARGO.contains(find)){
   System.out.println("FOUND");
}
else{
   System.out.println("NOT FOUND");
}

搜索总是返回 Not found 但我找到的元素是存在的。如何修复它以返回 FOUND? 谢谢。

【问题讨论】:

    标签: java algorithm search arraylist find


    【解决方案1】:

    看起来您的 CARGO 列表包含 CARGO 对象(使用相同名称不是一个好主意),但您正在检查该列表中是否包含字符串 (find),这自然会返回 false .

    如果您希望通过标识符搜索CARGO 实例,HashMap<String,CARGO> 会更合适。

    Map<String,CARGO> cargoMap = new HashMap<>();
    cargoMap.put(ID_Cargo,new CARGO(ID_Cargo,No_Container));
    ...
    if(cargoMap.containsKey(find)){
        System.out.println("FOUND");
    } else {
        System.out.println("NOT FOUND");
    }
    

    编辑:

    要显示具有find 键的CARGO 的属性(假设您的CARGO 类有这样的getter 方法):

    CARGO cargo = cargoMap.get(find);
    if (cargo != null) {
        System.out.println("FOUND: " + cargo.getCargoID() + " " + cargo.getContainerNo());
    } else {
        System.out.println("NOT FOUND");
    }
    

    【讨论】:

    • 谢谢,你的回答很有用。但我想再问你一次。您能否将返回值从“FOUND”更改为 ID_Cargo 和 No_Container 的值?
    【解决方案2】:

    您的列表 CARGO 不包含 Strings 而是 CARGO 实例(您确实应该重命名您的列表以避免混淆!)。因此,您需要使用 CARGO 实例而不是字符串进行搜索。

    CARGO.contains(find)

    应该是

    CARGO.contains(new CARGO(find, null) // because you search for the ID the second argument is empty

    1. 您需要在您的 CARGO 类中编写一个 equals 方法,该方法仅比较 ID

    应该可以的。

    但如果您想经常搜索,您应该考虑使用Map 而不是List

    附注我不能提供具体的代码,因为我不知道你的类到底是什么样子

    【讨论】:

      【解决方案3】:

      您的 CARGO 列表包含 Cargo 对象,并且您正试图在该列表中找到一个“字符串”,这就是您得到 Not Found 的原因。改用循环: 这是一个接受列表和 ID 的方法,如果存在具有该 ID 的货物,则返回 true,否则返回 false

      public boolean isExist(ArrayLisr<Cargo> CARGO , String ID) { 
          for(int i = 0; i < CARGO.size(); i++){
                Cargo cargo = CARGO.get(i);
                if( cargo.getID.equals(ID)
                       return true;
          }
          return false;
      }
      

      方法 .get(i) 返回列表中位置 i 的对象,方法 .size() 返回该列表中的对象数 方法 .getID 是您应该在 Cargo 类中创建的方法,并使其返回 ID

      基本上,这个方法一个一个地获取列表中的对象,检查那个对象是否有我们想要的ID,如果有则返回true,否则转到另一个对象。如果我们到达列表的末尾并且该列表中的所有对象都没有返回true,这意味着不存在具有该ID的对象,因此返回false

      【讨论】:

        最近更新 更多