如何从数组中检索数据?

时间:2015-05-28 06:42:32

标签: java arrays

我正在为酒店预订系统编写程序。我目前在阵列中有房间信息,我希望客户输入房间的ID,它将检索该特定房间的所有细节。这是数组的代码:

  Room [] rooms = 
  {
    new Room("GARDEN0001", "NorthWest Garden View", 45.00),
    new Room("GARDEN0002", "SouthEast Garden View", 65.0),
    new Room("GARDEN0003", "North Garden View", 35.00),
    new Room("GARDEN0004", "South Garden View", 52.0),
    new Room("GARDEN0005", "West Garden View", 35.00),
    new Room("GARDEN0006", "East Garden View", 35.00)      
  };

格式为ID,描述,价格。

提前致谢

7 个答案:

答案 0 :(得分:2)

您可以使用for-each循环迭代数组,并检查它是否匹配:

for (Room r : rooms) { 
    if (r.id.equals(REQUESTED_ID)) {
           //do something with it
    }
}

但是,如果您的阵列变大,您可能希望切换到更智能的数据结构,例如HashSet,允许智能(和快速)搜索。
请注意,您还需要覆盖Room#equals()Room#hashCode()才能使用HashSet,或类似地使用HashMap<String,Room>

答案 1 :(得分:1)

您可以indexes访问/检索数组中的项目。

让我们说:

int[] x = new int[5];
x[2] = 4; // Access the 3rd element

第一个元素的索引始终从0开始,它被称为base index

因此,如果数组的大小为3,那么所有元素的索引都是0,1,2。

在这种情况下,您可以访问项目:

for(int i = 0 ; i < rooms.length ; i ++) {
    if(room.getID().equals(userInput)){
    //
    }
}

for(Room room : rooms) {
   // access by room. , here room is you item
   if(room.getID().equals(userInput)){
    //
   }
}

答案 2 :(得分:1)

虽然你可以像在amit的回答中那样做,并且通过它们进行迭代,但我强烈建议你使用某种形式的Map。这就是他们的目的。

Map<String, Room> rooms = new HashMap<>();
Room r = new Room("GARDEN0001", "NorthWest Garden View", 45.00);
rooms.put(r.getId(), r);
r = new Room("GARDEN0002", "SouthEast Garden View", 65.0);
rooms.put(r.getId(), r);
r = new Room("GARDEN0003", "North Garden View", 35.00);
rooms.put(r.getId(), r);
r = new Room("GARDEN0004", "South Garden View", 52.0);
rooms.put(r.getId(), r);
r = new Room("GARDEN0005", "West Garden View", 35.00);
rooms.put(r.getId(), r);
r = new Room("GARDEN0006", "East Garden View", 35.00);
rooms.put(r.getId(), r);

(我假设你的Room类有一个返回id的getId()方法。) 然后,您可以检索房间:

Room room = rooms.get("GARDENOOO2");

Room room = rooms.get(savedId);

答案 3 :(得分:1)

如果你使用的是java8,你可以这样做:

Arrays.stream(rooms).filter(room -> "YOUR_ID".equals(room.getId())).findFirst().get();

答案 4 :(得分:0)

这里有一些代码只是为了给你提供想法。

for(Room room:rooms ){
if(room.getID().equals(userInput)){
 return room;
}
}

答案 5 :(得分:0)

通过索引访问数组。无法通过Room直接获取ID。 您可以遍历rooms并选择正确的Room,如下所示:

private Room getRoomById(String id) {
    for (Object room : rooms) {
        if (room.getId == id) {
            return room;
        }
    }
    return null;
}

答案 6 :(得分:0)

数组是这项工作的错误工具。你所做的就是给自己一个比你需要的更难的问题。我建议使用TreeMap将唯一的房间ID存储为密钥(Java String具有equals,hashcode和compareTo方法的正确实现),并将重构的Room实例存储为值。

通过删除键字段来更改Room值对象,然后将其存储为TreeMap值,使用房间ID(在Java字符串中)作为TreeMap键。

通过使用TreeMap,无需循环存储的房间,您可以使用TreeMaps get(Object key)方法来检索所需的房间详细信息。