在 Arraylist 中搜索包含某个元素的元素

Search an element in Arraylist where it's contains some element

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

这是要添加的代码

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");
}

搜索总是return未找到,但我找到的元素存在。如何修复它以便 return 找到? 谢谢

看起来您的 CARGO 列表包含 CARGO 个对象(使用相同的名称不是个好主意),但您正在检查是否包含字符串 (find)在那个列表中,自然 returns 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 class 有这样的 getter 方法):

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

您的 CARGO 列表包含 Cargo 对象,而您试图在该列表中查找 "String",这就是您找不到的原因。改用循环: 这是一个带有列表和 ID 的方法,如果存在具有该 ID 的货物,则 return 为 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) returns 列表中位置 i 的对象,方法 .size() returns 该列表中的对象数 方法 .getID 是您应该在 Cargo class 中创建的方法,并使其成为 return ID

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

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

CARGO.contains(find)

应该是

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

  1. 你需要在你的 CARGO class 中写一个 equals 方法,它只比较 ID

应该可以。

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

P.s。我无法提供具体的代码,因为我不知道你的 class 长什么样子