当前位置: 代码迷 >> J2EE >> java 根据条件在List中筛选定符合条件的对象
  详细解决方案

java 根据条件在List中筛选定符合条件的对象

热度:6   发布时间:2016-04-17 23:40:58.0
java 根据条件在List中筛选出符合条件的对象
例如
 List list = NEW ArrayList();
people p = new Peple();
p.setage("1");
p.setname("2");
people p2 = new Peple();
p2.setage("3");
p2.setname("4");
people p3= new Peple();
p3.setage("1");
p3.setname("2");
lsit.add(p);
lsit.add(p2);
lsit.add(p3);

给定条件“1” 我要筛选出List中age字段值是1的对象

不要用简单的for循环
如 fro(...){
xx.eques(1)
}
有没有什么高性能的方法或者算法?
------解决思路----------------------
你确定你这叫对象么...
------解决思路----------------------
 for (People people : list) {
if(people.getAge().equals("1")){
System.out.println("对象:"+people.getName());
}
}


这个需要高性能,你有多少数据啊...
------解决思路----------------------
引用:
 for (People people : list) {
if(people.getAge().equals("1")){
System.out.println("对象:"+people.getName());
}
}


这个需要高性能,你有多少数据啊...

我们也 这么用。
------解决思路----------------------
Collections.binarySearch 方法
------解决思路----------------------
引用:
Collections.binarySearch 方法
binarySearch(List<? extends T> list, T key, Comparator<? super T> c) 
          使用二分搜索法搜索指定列表,以获得指定对象。
  这个问题问的,楼主这样写,要是平常就是要for(){} ,比较性能的话,就是list 、map、最后这个使用二分的貌似我没怎么用过,不过应该效率很高。仁者见仁,智者见智
------解决思路----------------------
引用:
Collections.binarySearch 方法

哥。 用这个先要排序啊。  排序比单个查找还费时吧。

其实对于list,只能通过遍历来查找,对于数据不大,性能上没问题。
要是数据很多,应该优先考虑hashmap,而不是用list来存放数据
------解决思路----------------------
引用:
Quote: 引用:

Collections.binarySearch 方法

哥。 用这个先要排序啊。  排序比单个查找还费时吧。

其实对于list,只能通过遍历来查找,对于数据不大,性能上没问题。
要是数据很多,应该优先考虑hashmap,而不是用list来存放数据

性能的话,你可以实际测量下
------解决思路----------------------
建议还是直接遍历吧
------解决思路----------------------
你想效率高,就别用List了啊!试试用下面这个Map
Map<Integer,List<Peple>>,就是map中添加记录时需要你自己判断一下,该key是否以存在

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {

public static void main(String[] args) throws Exception {
Map<Integer,List<People>> map=new HashMap<Integer,List<People>>();
People p1=new People(1,"2");
addPersonToMap(map,p1);
People p2=new People(3,"4");
addPersonToMap(map,p2);
People p3=new People(1,"2");
addPersonToMap(map,p3);
System.out.println(map.get(1));
}
private static boolean addPersonToMap(Map<Integer,List<People>> map,People p1){
boolean flag;
int key=p1.getAge();
if(map.containsKey(key)){
List<People> value=map.get(1);
value.add(p1);
map.put(key, value);
flag=true;
}else{
List<People> value=new ArrayList<People>();
value.add(p1);
map.put(key, value);
flag=false;
}
return flag;
}
}
class People{
int age;
String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public People() {
super();
}
public People(int age, String name) {
super();
this.age = age;
this.name = name;
}

}

------解决思路----------------------
循环遍历效率不会低
------解决思路----------------------
10楼说的对,用map就相当不错了
  相关解决方案