私は自分自身にJavaを教えており、ショップ、製品、棚の3つのクラスからなるシンプルなパッケージを持っています。ショップオブジェクトには多くの棚が含まれ、棚には多くの商品が含まれます。この場合、各商品は1つの棚でのみ使用できます。
製品は次のようになります。
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を解析するときに、名前でシェルフを検索して、すでに作成されているかどうかを確認したいので、たとえば、「Bananas、Fruit」という行を読み取ると、次のように処理されます。
if (!myshop.getShelfByName("Fruit")){
myshop.addShelf(new t_shelf("Fruit"));
}
myshop.getShelfByName("Fruit").addProduct("Bananas"); //Constructors accept the name as a parameter.
私の質問は:
単にHashSetを反復処理し、すべてのアイテムに対して名前をチェックするよりも、getShelfByName(String name)の優れた実装はありますか?(O(N)アルゴリズムを避けたい)。
ありがとう!
これを解決する試みは非常にありがたいことに受けました:)