簡體   English   中英

我應該使用什么數據結構來存儲不同類型的對象

[英]What data structure I should use to store objects of different types

我想為書店構建一個簡單的應用程序。 出售的東西有幾種:書籍,電影和雜志。 我正在考慮使用toString()方法和3個子類(書籍,電影,雜志toString()來構建一個抽象類toString()以后還會再介紹)。 然后在程序中,我想對這些對象進行操作,並想將它們全部保留在ArrayList<ParentClass> 這是數據結構的好選擇嗎?

首先,我建議您使用泛型。 例如,如果要定義抽象類(或者可能是更好的接口Item ),那么請創建new ArrayList<Item> ,因此除了Item之外,您將無法在其中添加任何內容。

其次,使用界面。 您的定義應如下所示:

List<? extends Item> lll = new ArrayList<Item>();

主數據結構的選擇取決於您的需求。 我相信您將執行某種搜索機制。 在這種情況下,您可以使用“ Map或“組合列表”,在該列表中順序存儲所有對象,並使用多個地圖幫助您通過不同的參數執行搜索。

無論如何,您應該使用提供業務邏輯基本功能的某個類(模型)包裝數據結構,因此,如果您要更改某些內容,則可以在該類中進行操作,而無需更改應用程序的其他部分。

數據結構完全取決於您需要對數據進行的處理。 如果您要做的就是遍歷所有調用toString方法的對象,那么就去吧。 如果您需要對ArrayList不足的數據進行處理,那么最好開始考慮其他選擇。

您可以創建諸如BookstoreEntity抽象超類(或接口)之類的東西,並具有要操作的項目的共同特征。 colormaterialprice等...您可以在抽象超類中定義setter和getters方法。 BookstoreEntity對象的列表將包含IS-A BookstoreEntity

例如,您可以在for循環中對常見方法(在超類中定義)進行操作(例如getColorgetPrice等)。

for(BookstoreEntity be: listOfItems) {

  be.getColor();
  be.getPrice();
  //etc...

}

問候!

顯然,您的問題不是元素的訪問方法。 因此,任何容器類型(列表,地圖,向量等)都可以滿足您的訪問需求。 我猜,更清晰,更全面的問題陳述是,如果在面向對象的范式的上下文中發布對對象的一般處理。

但是,任何類的對象都可以放在任何通用容器中,而無需任何抽象(通過繼承,接口或抽象類),因為默認情況下所有類都擴展Object類。 如果不需要任何一般處理,例如對每個元素進行相同的操作,如問題的標題所示,則也可以使用: ArrayList<Object> bookStore

但是,大多數人發現此方法無用,因為將這些對象放在一起以相同的方式使用時,它毫無意義。 我猜想,您應該確定這些對象的一般處理方式,然后聲明一些屬性。 之后,創建一個父類並使用它定義容器。

如果您想采用抽象類的方式,建議您設置通用屬性。 例如,當您使用書店的示例時,我確定所有內容都具有價格。 您可能還可以將其他東西與之關聯。 這樣可以避免您在子類中一遍又一遍地重新實現簡單的事情。

abstract class BookstoreEntity {
    protected double price;

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

與繼承抽象類相比,我更喜歡Interfaces。 我建議定義一個BookstoreEntity接口,而不要使用抽象類。

interface BookstoreEntity {

    public double getPrice();

    public void setPrice(double price);

    //more methods here.
}

我還建議您制作一個類BookStoreProductManager或類似的類來定義程序整體上的工作。 它可能包含一個很好地表示它的本機數據結構(也許是Map<int, BookStoreEntity> ,其中int是產品ID)。 我建議您在這種情況下不要對數據結構進行子類化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM