0

我有两个简单的 ArrayList,一个用于 3 条总线,一个用于 3 条路线。

ArrayList<Bus> busList = new ArrayList<Bus>();
busList.add(new Bus("B101", 20, 4, 16));
busList.add(new Bus("B102", 20, 6, 14));
busList.add(new Bus("B103", 20, 0, 20));

ArrayList<Route> routeList = new ArrayList<Route>();
routeList.add(new Route("R75", "Atlanta", "Cincinnati", "Chattanooga, Knoxville, Lexington", 150));
routeList.add(new Route("R95", "Miami", "Savannah", "Jacksonville", 200));
routeList.add(new Route("R275", "Milford", "Mariemont", "Loveland, Blue Ash", 25));

我希望每辆公共汽车都与一条路线相关联。我在数据库技术方面的经验让我认为我想要某种外键设置?像 Bus B101 这样的东西会在其 ArrayList 中包含 R95 以关联到特定路线。

我想要的功能是接受用户输入来搜索路线 ArrayList 的特定起点和终点位置,然后确定特定链接巴士的座位可用性。

4

3 回答 3

2

对于关联,请使用 HashMap。

Map<String,Route> busToRoutesMap = new HashMap<String,Route>();
// key = "B101", value = R95; getName() delivers String "B101"
busToRoutesMap.put(busList.get(0).getName(), routeList.get(1));

检索关联:

Route route = busToRoutesMap.get(busList.get(0).getName());

这将交付 Route R95。

我个人更喜欢原始键,这样我可以更好地将其序列化为文件。以及其他一些优点(更快,无需覆盖 hashcode())

在那种情况下,我不会使用 BUS 对象作为键,而是使用 busID,或者在您的情况下使用 busName。

于 2013-07-11T19:23:47.040 回答
0

您应该在每个中创建一个Route属性(或ArrayList<Route>Bus来存储对同一Route实例的引用。

于 2013-07-11T19:24:11.223 回答
0

数组列表使用整数->元素关系。你想要一张地图。由于任何类型的元素都可以是键,因此值可以引用键。请注意,键必须是唯一的。

我建议对两个表都使用哈希图或树图。树图通过比较工作,哈希图通过散列工作。

如果您需要一个键的多个值,请使地图使用 [value class] 的 ArrayList 作为实际值类型。

由于对象使用引用,它们可以相互引用并允许每个对象的更改将传播到其他映射。

于 2013-07-11T19:24:35.227 回答