gpt4 book ai didi

java - 更新集合中的项目

转载 作者:行者123 更新时间:2023-12-02 02:19:05 24 4
gpt4 key购买 nike

我有一个 Java 对象Collection,我需要获取特定项目才能更新其属性。我可以使用 streamfilter 获取该项目并更新它,或者我可以使用 .remove().add() 替换旧对象。

我的问题是,其中哪一种在性能方面会更好,以及每种方法的优缺点是什么。

例如

public class Car
{
private Integer id //unique;
private String brand;
private Float price;

Car(Integer id, String brand, Float price)
{
this.id = id;
this.brand = brand;
this.price = price;
}

public Integer getId()
{
return id;
}

public void setId(Integer id)
{
this.id = id;
}

public String getBrand()
{
return brand;
}

public void setBrand(String brand)
{
this.brand = brand;
}

public Float getPrice()
{
return price;
}

public void setPrice(Float price)
{
this.price = price;
}

@Override
public boolean equals(Object o)
{
if (this == o)
{
return true;
}
if (o == null)
{
return false;
}

Car car = (Car) o;

return id != null && id.equals(car.getId());
}

@Override
public int hashCode()
{
return id != null ? id.hashCode() : 0;
}

}


public static void main(String[] args)
{
Collection<Car> cars = new ArrayList<>();

cars.add(new Car(1, "Ford", (float)10000));
cars.add(new Car(2, "Fiat", (float)15000));
cars.add(new Car(2, "BMW", (float)20000));

//Method 1
Car updateCar = new Car(2, "Fiat", (float)35000);
Car newCar = cars.stream().filter(c -> c.getId().equals(updateCar.getId())).collect(toList()).get(0);
newCar.setPrice(updateCar.getPrice());

//Method 2
Car updateCar = new Car(2, "Fiat", (float)15000);
cars.remove(updateCar);
updateCar.setPrice((float)35000);
cars.add(updateCar);
}

最佳答案

您看待它的方式是错误的:在考虑性能时,您的切入点应该是时间复杂度。然后您可以深入研究实现细节。

在您的例子中,两种方法的运行时间都是 O(n)。

如果性能如此重要,请转向 O(1) 算法,例如使用 HashMap<Integer, Car .

关于java - 更新集合中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48805578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com