我有一個 Product 類和一個擴展 Product 的 DerivedProduct 類。衍生產品是 2 種或更多不同產品的組合(并且可以是每種產品的不同數量)。例如,衍生產品水由 2 個氫產品和 1 個氧產品組成。
我想要一個 DerivedProduct 的屬性,它是一個結構,包含它的產品和每個產品的數量。我可以使用什么資料結構?例如,ArrayList 只讓我(據我所知)每個索引持有一個物件,但我想要兩個(產品物件和一個整數)
uj5u.com熱心網友回復:
任何型別的Map(例如HashMap)都會做你想做的。使用Product作為鍵和Integer代表計數作為值。所以你可能會寫
public class DerivedProduct extends Product {
private Map<Product, Integer> contents = new HashMap<>();
public void putProduct(Product product, Integer count) {
contents.put(product, count);
}
public int getCount(Product product) {
Integer count = contents.get(product);
return count == null ? 0 : count;
}
}
請確保您有適合equals和hashCode方法定義的Product類,使這項作業正常。
uj5u.com熱心網友回復:
AMap<Product, Integer>是一種可能性;見@Dawood 的回答。
但是,如果您不需要 a 提供的查找操作Map,則可以使用以下替代方法之一:
List<CustomClass>whereCustomClass有一個Product欄位和一個int欄位來保存計數。(自定義類可能是recordJava 17 中的一個類。)List<Object[]> 其中Object[]陣列包含 aProduct和 anInteger。使用陣列而不是串列的上述類似物。
從 OO 設計和型別安全的角度來看,Map和List<CustomClass>版本“相當”。它歸結為功能與運行時開銷1之間的權衡。
1 - 具體來說,資料結構的記憶體開銷和您將要使用的操作的 CPU 開銷。但請注意,這些開銷可能無關緊要……取決于您的應用程式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/334822.html
