搜索Arraylist中的元素,其中包含一些元素

时间:2015-11-20 07:31:47

标签: java algorithm search arraylist find

我需要帮助。你能给我解决方法如何修复我的代码吗? 我有一个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");
}

搜索始终返回未找到但我找到的元素存在。如何修复它才能返回FOUND? 感谢' S

3 个答案:

答案 0 :(得分:1)

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

如果您希望按标识符搜索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");
}

编辑:

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

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

答案 1 :(得分:0)

您的CARGO列表中有货物对象,而您正试图在该列表中找到“字符串”,这就是您找不到的原因。改为使用循环: 这是一个获取列表和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

答案 2 :(得分:0)

您的列表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课程中编写一个equals方法,该方法仅对ID
  2. 进行了比较

    这应该有效。

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

    P.S。我无法提供具体的代码,因为我不确切地知道你的课程是什么样的