java中简单预订系统的最佳数据类型

java中简单预订系统的最佳数据类型,java,list,dictionary,types,hashmap,Java,List,Dictionary,Types,Hashmap,我试图创建一个简单的预订系统来练习TDD。我最初尝试使用一个数组列表,其中包含一定数量的表示时间的空格,然后是一个地图,两者看起来都很接近,但最终都不起作用。 Immutibilty是关键,我使用了一个构造函数来设置容量,并试图让setter依赖于字符串值的空字符串或空字符串(两者都尝试过): public class BookingSystem { private BookingSystem bookingSystem; private Map<Integer, Str

我试图创建一个简单的预订系统来练习TDD。我最初尝试使用一个数组列表,其中包含一定数量的表示时间的空格,然后是一个地图,两者看起来都很接近,但最终都不起作用。 Immutibilty是关键,我使用了一个构造函数来设置容量,并试图让setter依赖于字符串值的空字符串或空字符串(两者都尝试过):

public class BookingSystem {

    private BookingSystem bookingSystem;
    private Map<Integer, String> classList;

    public HashMap<Integer, String> setClassList() {
        for (int i=0;i<24; i++) {
            classList.put(0, "");
        }
        return classList;
    }

    public void bookClassroom(int time, String room) throws BookedException {
        if (classList.get(time).equals("")) {
            classList.put(time, room);
        } else {
                throw new BookedException();
        }
    }
公共类预订系统{
私人预订系统;
私有地图类列表;
公共HashMap setClassList(){

对于(int i=0;i嗯,这取决于预订情况。如果预订时段较小(预订单位为一小时,学校从上午9点到下午5点开放),则您可以将每个小时作为地图结构中的一个键。但是,如果您的预订应用程序使用了一天以上,则必须将日期(ddmmyyyy)与地图(map>)关联

如果预订时间复杂(可以从8:20到11:10),您将拥有一个带有预订开始日期、预订结束日期和教室字段的预订实体。然后,您将在一个与预订数据库交互的方法中实现预订逻辑。该方法将检查是否存在与我们要创建的预订冲突的预订。如果是这样,该方法将引发异常;否则将创建一个新预订

为了更好地理解要使用哪种Java结构,您必须了解每种结构的特殊性。这里有一个简短的总结“不变性”约束使得Hashmap/表很难实现,因为您的表会变得非常臃肿

哈希表中的运行时是O(1)摊销的。但是,哈希表会变得过于密集,导致运行时为O(N)。我相信重新灰化会使这种情况非常罕见,并将运行时减少到O(1)

如果要实现ArrayList,最坏情况下运行时为O(N)。但是,如果知道元素的确切位置,则运行时为O(1)运行时。总体而言,随着保留数量的增加,使用ArrayList时,搜索/插入/删除的平均运行时将高得多

为了提供最大的效率,您必须在当前ArrayList每次填充时将结构增加n/2个元素。起初这似乎并不坏,但当您有大量可能的保留时会发生什么?您的资源被严重占用


就我个人而言,我会尝试实现一个。这遵循了二进制搜索树属性,它可以使您的预订时间保持有序,同时还可以保持树的平衡(节省空间和搜索/插入/删除运行时)


AVL树为搜索插入和删除提供了O(logn)的运行时,为最坏情况提供了O(N)的空间。随着您的预订数量的增加,AVL树的性能将明显优于ArrayList的Hashmap/表。

辩论太多了,伙计……我相信eqch会有一种不同且独特的设计,我们中的一个会提出一些想法。。。