有这样2个list;
List<User> list1 = new ArrayList();
User u1 = new User();
u1.setName("a");
u1.setAge(21); User u2 = new User();
u2.setName("b");
u2.setAge(22); User u3 = new User();
u3.setName("c");
u3.setAge(23); list1.add(u1);
list1.add(u2);
list1.add(u3);
List<User> list2 = new ArrayList();
User u4 = new User();
u4.setName("a");
u4.setAge(21); User u5 = new User();
u5.setName("b");
u5.setAge(22); User u6 = new User();
u6.setName("cc");
u6.setAge(28); list2.add(u4);
list2.add(u5);
list2.add(u6); 目的需要实现这样一个方法:
List<User> getBoth(List<User> list1, List<User> list2){
return null;
}
方法返回:根据User类中name相同的那些类的list 如:当前例子应该返回的list中包含u4 u5 或 u1 u2
如果直接使用
for(User u1:list1){
for(User u2:list2){
if(u1.getName().equals(u2.getName())){
list.add(u1);
}
}
}
返回list,虽然能实现功能,但效率上不是很高,求一个比这个效率高一些的实现方式,谢谢~!~
List<User> list1 = new ArrayList();
User u1 = new User();
u1.setName("a");
u1.setAge(21); User u2 = new User();
u2.setName("b");
u2.setAge(22); User u3 = new User();
u3.setName("c");
u3.setAge(23); list1.add(u1);
list1.add(u2);
list1.add(u3);
List<User> list2 = new ArrayList();
User u4 = new User();
u4.setName("a");
u4.setAge(21); User u5 = new User();
u5.setName("b");
u5.setAge(22); User u6 = new User();
u6.setName("cc");
u6.setAge(28); list2.add(u4);
list2.add(u5);
list2.add(u6); 目的需要实现这样一个方法:
List<User> getBoth(List<User> list1, List<User> list2){
return null;
}
方法返回:根据User类中name相同的那些类的list 如:当前例子应该返回的list中包含u4 u5 或 u1 u2
如果直接使用
for(User u1:list1){
for(User u2:list2){
if(u1.getName().equals(u2.getName())){
list.add(u1);
}
}
}
返回list,虽然能实现功能,但效率上不是很高,求一个比这个效率高一些的实现方式,谢谢~!~
解决方案 »
- grayButton.setMargin(new Insets(0,0,0,0)); 没见得这句代码对按钮外观有什么变化?
- 寻找解决java 中JComboBox 的ItemListener中执行两次事件的方法?
- 请教各位前辈一个关于按钮传参的问题
- JSP用File上传问题 (急! 在线等)
- (高难度字符串处理)如何把如下字符串:“所困多幅#112哭诉大892”中的数字892提取出来
- 关于<jsp:include>问题?????????
- 看了高手写的东西,自己写了一个,发现一些问题
- 在某个目录下有一些相同文件名不同扩展名的文件1.doc,1.txt,1.html,如何删除文件名为1的这些不同扩展名的文件
- 超级菜鸟问题:java程序的扩展名是什么?
- 我的按钮位置改变不了,大家帮我看看
- 这是什么错误!不影响运行,关闭Tomcate时候出现的,ECLIPSE内置的那个!
- 不能显示数据库的内容
import java.util.List;public class Test{
public static void main(String[]args){
List <User> list1 = new ArrayList<User>();
User u1 = new User();
u1.setName("a");
u1.setAge(21); User u2 = new User();
u2.setName("b");
u2.setAge(22); User u3 = new User();
u3.setName("c");
u3.setAge(23); list1.add(u1);
list1.add(u2);
list1.add(u3);
List <User> list2 = new ArrayList<User>();
User u4 = new User();
u4.setName("a");
u4.setAge(21); User u5 = new User();
u5.setName("b");
u5.setAge(22); User u6 = new User();
u6.setName("cc");
u6.setAge(28); list2.add(u4);
list2.add(u5);
list2.add(u6);
getBoth(list1,list2); }
static void getBoth(List <User> list1, List <User> list2){
List<User> list=new ArrayList<User>();
for(User u1:list1){
for(User u2:list2){
if(u1.getName().equals(u2.getName())){
list2.remove(u2);//此后就不会比较这个了。
list.add(u1);
}
}
}
for(User u:list){
System.out.println(u.getName());
}
} }
list1.retainAll(list2);
for(User u1,User u2;list2;User u2:list1){
if(u1.getName().equals(u2.getName())){
list.add(u1);
User u1:list1 firstElem;//把list1的第一个再给u1
User u2:list2;//再把list2中下个元素赋给U2
}
}这个算法类似于打印九九乘法口诀表的最优算法,楼主可以在CSDN里找一下,我以前看过这个问题。
if (obj instanceof User) {
User nUser = (User) obj;
return (name.equals(nUser.name)&&(age==nUser.age));
}
return super.equals(obj);
}
list1.retainAll(list2);但是在这之前最好使用HasCode和Eqauls方法java.util.Connections
然后再for 另一个list2 通过 list2的值放到上面HashMap作为key去拿值,如果拿到,
就说明相等,否则没有此值。
==========================================================================
大体于下
for(A a : aList){
map.put(a.amount,a);
}
for(B b : bList){
A a = map.get(b.amount);
if(a==null){
//a==null则说明没有同b匹配的项
}else{
//a!=null则说明匹配上了
}
}
[code=Java]
import java.util.ArrayList;
import java.util.List;public class Test {
public static void main(String[] args) {
List<User> list1 = new ArrayList<User>();
User u1 = new User();
u1.setName("a");
u1.setAge(21); User u2 = new User();
u2.setName("b");
u2.setAge(22); User u3 = new User();
u3.setName("c");
u3.setAge(23); list1.add(u1);
list1.add(u2);
list1.add(u3); List<User> list2 = new ArrayList<User>();
User u4 = new User();
u4.setName("a");
u4.setAge(21); User u5 = new User();
u5.setName("b");
u5.setAge(22); User u6 = new User();
u6.setName("cc");
u6.setAge(28); list2.add(u4);
list2.add(u5);
list2.add(u6); getBoth(list1, list2); }
private static void getBoth(List<User> list1, List<User> list2) {
List<User> list = new ArrayList<User>();
for(User u : list1) {
if(list2.contains(u)) {
list.add(u);
}
} for (User u : list) {
System.out.println(u.getName());
}
}}class User {
String name;
int age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} /**
* {@inheritDoc}
*
* @see java.lang.Object#equals(java.lang.Object)
*/
public boolean equals(Object obj) {
if (obj == this)
return true; if (obj == null)
return false; if (!(obj instanceof User))
return false; return name.equals(((User) obj).getName());
}}
[code]