java - 更新集合中的项目

标签 java performance collections

我有一个 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/

相关文章:

java - 如何执行apache thrift的java程序(如果可以的话用ant)

javascript - JS 中解析 JSON 就像 JAVA 中的 GSON 一样

c# - 如何在庞大的词典中加快搜索速度

java - 在 Java 中从 inputStream 压缩多个对象

java - 深度优先搜索错误

c# - 比较ints和ints还是比较strings和strings效率更高

performance - 使用 timeuuid 作为列名将日志数据写入 Cassandra 时性能不佳

java - 从集合中选择随机子集的最佳方法?

java - 根据时间窗口对元素进行排序

c - 保留 C 库中的 Ruby 对象,避免被垃圾回收