我正在自学 Java,我有一个包含三个类的简单包——商店、产品和货架。一个商店对象包含许多货架,一个货架包含许多产品,在这种情况下,每个产品仅在一个货架上可用。
一个产品看起来像这样:
public class t_product {
private t_shelf shelf;
private String name;
}
一个架子看起来像这样:
public class t_shelf {
private Set<t_product> products = new HashSet<>();
private String name;
}
商店对象如下所示:
public class t_shop {
private Set<t_shelf> shelves = new HashSet<>();
}
我还有一组功能可以在货架上添加或删除产品。
myshelf.addProduct(myproduct);
将设置 myproduct.shelf = myshelf,并将 myproduct 添加到 myshelf.products。这很好用,并且很好地处理了这种关系。类似的功能链接商店和货架。
继续解决问题
我有一个 .csv 存储:
Product | Shelf
----------------------
Hats | Headwear
Helmets | Headwear
Socks | Footwear
Apples | Fruit
Bananas | Fruit
Oranges | Fruit
解析 .csv 时,我想按名称搜索架子以查看它是否已经创建,因此,例如,在读取“香蕉,水果”行时,它将处理:
if (!myshop.getShelfByName("Fruit")){
myshop.addShelf(new t_shelf("Fruit"));
}
myshop.getShelfByName("Fruit").addProduct("Bananas"); //Constructors accept the name as a parameter.
我的问题是:
getShelfByName(String name) 有没有比简单地遍历 HashSet 并针对每个项目检查名称更简洁的实现?(想要避免 O(N) 算法)。
谢谢!
非常感谢任何解决此问题的尝试:)