Kes*_*sIT 2 java hashmap multidimensional-array
我打算建一张酒店桌子.但是当我尝试在Java中实现它时,我遇到了问题.
我的酒店有Level(int id) x Room(int id) x Field(String status,int counter)
php中的相同内容如下:
$level=1; $room=2;
if(isset($hotel[$level][$room])) {
print("Room: ".$level*100+$room);
print(", Status: ".$hotel[$level][$room]['status']);
print(", Total clients:".$hotel[$level][$room]['counter']);
}
Run Code Online (Sandbox Code Playgroud)
此打印返回我(如果房间存在): " 房间: 102,状态:保留,总客户: 8";
现在我想在JAVA中拥有相同的功能.
但问题是,我无法建立这个:
int[][][] my hotel;
Run Code Online (Sandbox Code Playgroud)
因为,我的多维数组中有不同的类型.
我试着这样做:
Map<String, List<String>> myHotel = new HashMap<String, List<String>>();
Run Code Online (Sandbox Code Playgroud)
要么:
List<List<List<String>>> myHotel;
Run Code Online (Sandbox Code Playgroud)
但
out.println(
myHotel.get(1).get(2).get("status") + "\n" +
out.println(myHotel.get(1).get(2).get("status"));
Run Code Online (Sandbox Code Playgroud)
甚至:
out.println("Status:" +
myHotel.get(1).get(2).get(0) + "\tClients:" +
myHotel.get(1).get(2).get(1)
);
Run Code Online (Sandbox Code Playgroud)
另外如何放置元素.我想的是:当它是MAP表时:
myHotel.put(1).add(2).add(0, "Reserved"));
// But better would be:
// myHotel.put(1).add(2).add("status", "Reserved"));
Run Code Online (Sandbox Code Playgroud)
或者当它是一个清单时<List<List<String>>>:
myHotel.add(1).add(2).add(0, "Reserved"));
// But better would be:
// myHotel.add(1).add(2).add("status", "Reserved"));
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助:)
我可能会将酒店建模为一个对象Hotel,房间作为一个对象Room等,而不是将所有内容堆叠在一个多层集合中.这变得非常冗长,一旦你改变了关系,那么这个变化就会反映在整个代码中.
然后,每个对象都包含对其组件的引用(Hotel包含Rooms等列表).一旦你这样做,我认为一切都应该变得更加清晰.此外,您的Hotel对象了解如何查找Rooms,Room对象了解如何获取其属性,并且您的调用代码变得不那么冗长,并且很少依赖于Hotel/ Roomimplementation.例如,你可以这样做:
Hotel hotel = new Hotel();
Set<Room> rooms = hotel.getFreeRooms(RoomType.NON_SMOKING);
Run Code Online (Sandbox Code Playgroud)
所以你的对象为你(客户端)工作,而不是你自己导航对象层次结构和工作.
这是OO的最终目标.一旦我发现自己将集合集合在一起,这通常表明需要新的对象类.