[英]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
抽象超類(或接口)之類的東西,並具有要操作的項目的共同特征。 像color
, material
, price
等...您可以在抽象超類中定義setter和getters方法。 BookstoreEntity
對象的列表將包含IS-A BookstoreEntity
。
例如,您可以在for循環中對常見方法(在超類中定義)進行操作(例如getColor
, getPrice
等)。
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.
}
我還建議您制作一個類BookStore
或ProductManager
或類似的類來定義程序整體上的工作。 它可能包含一個很好地表示它的本機數據結構(也許是Map<int, BookStoreEntity>
,其中int是產品ID)。 我建議您在這種情況下不要對數據結構進行子類化 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.