Java 这两个功能中哪一个性能最重
正如标题所说。以下两个函数中哪一个对jvm的性能影响最大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
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
中有多少个值,这取决于条件主要是真还是假。请注意,此方法只返回集合,而不是列表。您需要将过滤结果“倒”到一个新列表中。