在 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
- 你需要在你的 CARGO class 中写一个
equals
方法,它只比较 ID
应该可以。
但是如果你想经常搜索,你应该考虑 Map
而不是 List
。
P.s。我无法提供具体的代码,因为我不知道你的 class 长什么样子
我需要帮助。你能给我解决方案如何修复我的代码吗? 我有一个 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
- 你需要在你的 CARGO class 中写一个
equals
方法,它只比较ID
应该可以。
但是如果你想经常搜索,你应该考虑 Map
而不是 List
。
P.s。我无法提供具体的代码,因为我不知道你的 class 长什么样子