如何改进arraylist类中的add()方法

时间:2016-06-16 05:54:32

标签: java arraylist methods enums

我有一个:

主要班级, 运动课, sportList类 并提供变量看起来像运输成本的枚举类: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;
            } 


        }
    }

}

1 个答案:

答案 0 :(得分:0)

您没有使用正确的收藏品。你应该使用Map<String, Sport>,其中关键是运动用品的名称,价值就是运动本身。

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)。