【问题标题】:How to improve add() method in arraylist class如何改进 arraylist 类中的 add() 方法
【发布时间】:2016-10-17 11:35:46
【问题描述】:

我有一个:

主类, 体育课, 运动清单类 并提供枚举类,其中变量看起来像这样与运费配对:BAT ("Bat", 13.99), Helmut ("Helmut", 4.99)...

当用户在主类中输入更多供应品时,它们会通过 add() 方法添加到 arrayList(sportsList 类)(这些基本上是要运出的齿轮对象) - 如果 arrayList 为空,则添加齿轮。 ..如果进一步添加齿轮,则在arrayList中搜索相同齿轮的副本,并在找到时将齿轮的价格添加到齿轮的现有值中,其中包括仅应添加一次的运输值每个齿轮对象。

这可行...但由于我是 java 新手,我想看看如何改进它? 谢谢大家!

public void add (Sport sport) {

if (sportList.size() == 0){
        sportList.add(sport);
        sportList.get(0).addShipValue(sport.supplies.getCost());


    }else{
        for (int index = 0; index <sportList.size() ; index++) {

            if (sportList.get(index).supplies.getName().equals(sport.supplies.getName())) {
                sportList.get(index).addShipValue(sport.getShipValue());

             break;

            }
            if(index == sportList.size() - 1) {
                sportList.add(sport);
                sportList.get(index + 1).addShipValue(sport.supplies.getCost());

                break;
            } 


        }
    }

}

【问题讨论】:

    标签: java arraylist methods enums


    【解决方案1】:

    您没有使用正确的集合。您应该改用Map&lt;String, Sport&gt;,其中键是运动用品的名称,值是运动本身。

    private Map<String, Sport> sportsByName = new HashMap<>();
    
    public void add (Sport sport) {
        sportsByName.merge(sport.supplies.getName(),
                           sport,
                           (oldSport, newSport) -> {
                               oldSport.addShipValue(newSport.getShipValue);
                               return oldSport;
                           }); 
    }
    

    通过键 isO(1) 进行 HashMap 查找。将新值放入 HashMap 也是 O(1)。

    【讨论】:

    • 我只能使用 arraylist 来解决这个问题
    猜你喜欢
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多