Java 这两个功能中哪一个性能最重

Java 这两个功能中哪一个性能最重,java,performance,Java,Performance,正如标题所说。以下两个函数中哪一个对jvm的性能影响最大 protected List<Car> filterByNote(String note, List<Car> cars) { List<Car> tempList = new ArrayList<>(); for(Car c : cars) { if(c.getNotes().contains(note)) { tem

正如标题所说。以下两个函数中哪一个对jvm的性能影响最大

  protected List<Car> filterByNote(String note, List<Car> cars)
  {
    List<Car> tempList = new ArrayList<>();
    for(Car c : cars)
    {
      if(c.getNotes().contains(note))
      {
        tempList.add(c);
      }
    }
    return tempList;
  }

  protected void filterByNote2(String note, List<Car> cars)
  {
    for(Car c : cars)
    {
      if(!c.getNotes().contains(note))
      {
        cars.remove(c);
      }
    }
  }
protected List filterByNote(字符串注释,列出车辆)
{
List templast=new ArrayList();
用于(c车:汽车)
{
如果(c.getNotes().contains(note))
{
圣殿骑士。添加(c);
}
}
返回圣殿骑士;
}
受保护的空过滤器Bynote2(字符串注释,列出车辆)
{
用于(c车:汽车)
{
如果(!c.getNotes().包含(注释))
{
车辆。移除(c);
}
}
}

如果有人能向我解释为什么一个功能比另一个更重,那就太好了

通常在for循环中删除arraylist中的元素不是一个好主意,如果您想要类似于第二个想法,应该使用迭代器:

Iterator<Car> it = cars.iterator();
while (it.hasNext()) {
   Car myCar = it.next(); 
   if (something) {
        it.remove();
   }
}
Iterator it=cars.Iterator();
while(it.hasNext()){
Car myCar=it.next();
如果(某物){
it.remove();
}
}

第二个方法可能抛出异常ConcurrentModificationException,因为您在其迭代过程中更改了列表。尝试使用GoogleGuava和nice函数过滤器:

    protected List<Car> filterByNote(final String note, List<Car> cars) {
    return new ArrayList(Collections2.filter(cars, new Predicate<Car>() {
        @Override
        public boolean apply(Car input) {
            return input.getNotes != null && !input.getNotes.isEmpty() &&   input.getNotes().contains(note);
        }
    }));
    }
protected List filterByNote(最终字符串注释,列出车辆){
返回新的ArrayList(Collections2.filter(cars,new Predicate()){
@凌驾
公共布尔应用(车辆输入){
return input.getNotes!=null&&!input.getNotes.isEmpty()&&input.getNotes().contains(note);
}
}));
}

第一个会起作用,第二个会抛出异常,使用第一个。他们做不同的事情:一个修改列表,另一个返回另一个列表。你不能那样比较,你怎么比较?它们执行不同的功能。当然,第二个(如果正确的话)更快,因为它不会创建任何对象。此外,第二个不知道它应该做什么。当它只是从列表中删除一个项目时,为什么要进行
筛选
?这取决于您用于
汽车的
列表
的实现,以及您将删除多少值,以及在
cars
中有多少个值,这取决于条件主要是真还是假。请注意,此方法只返回集合,而不是列表。您需要将过滤结果“倒”到一个新列表中。