详细解决方案
求教一个关于两个list的类似求并集的算法。解决方法
热度:2109 发布时间:2013-02-25 21:17:56
两个list,里面都存的是String[]
list1
0 -{张三,3}
1 -{李四,16}
2 -{王五,6}
3 -{二麻子,8}
。
。
。
list2
0 -{李四,3}
1 -{二麻子,4}
2 -{刘德华,8}
。
。
。
求得并集
list
0 -{张三,3}
1 -{李四,19}
2 -{王五,6}
3 -{二麻子,10}
4 -{刘德华,8}
..
.
大概就是String[0]求并,同时String[1]求和
我写了一个感觉很麻烦。。。不知道有没有简单的算法。。。。
------解决方案--------------------------------------------------------
list1.addAll(list2);
------解决方案--------------------------------------------------------
你list里面的数据时不能重复的? 那就用set。 然后set1.addAll(set2)
------解决方案--------------------------------------------------------
- Java code
import java.util.ArrayList;import java.util.List;class Main { /* * {张三,3} {李四,16} {王五,6} {二麻子,8} * * {李四,3} {二麻子,4} {刘德华,8} */ /* * 0 -{张三,3} 1 -{李四,19} 2 -{王五,6} 3 -{二麻子,10} 4 -{刘德华,8} */ public static void main(String args[]) { List<String[]> list1 = new ArrayList<String[]>(); List<String[]> list2 = new ArrayList<String[]>(); list1.add(new String[] { "张三", "3" }); list1.add(new String[] { "李四", "16" }); list1.add(new String[] { "王五", "6" }); list1.add(new String[] { "二麻子", "8" }); list2.add(new String[] { "李四", "3" }); list2.add(new String[] { "二麻子", "4" }); list2.add(new String[] { "刘德华", "8" }); List<String[]> r = add(list1, list2); for (String[] arg : r) System.out.println(arg[0] + " " + arg[1]); } private static List<String[]> add(final List<String[]> arg0, final List<String[]> arg1) { List<String[]> result = new ArrayList<String[]>(); for (int i = 0; i < arg0.size(); i++) { // 标记arg0.get(i).[0] 和 // arg1.get(j).[0] 是否一样 boolean flag = false; for (int j = 0; j < arg1.size(); j++) { // 判断String[0] 是否一样 if (arg0.get(i)[0].equals(arg1.get(j)[0])) { flag = true; // String[1]加法 int temp = Integer.parseInt(arg0.get(i)[1]) + Integer.parseInt(arg1.get(j)[1]); // 以arg0 为标准 ,放入结果中 result.add(new String[] { arg0.get(i)[0], String.valueOf(temp) }); // 去掉 arg1中String[0]相同的元素 arg1.remove(j); break; // 这一句增加效率而已 } } // 如果 arg0.get(i).[0] 和 arg1.get(j).[0] 一样 避免重复添加 if (!flag) result.add(arg0.get(i)); } // 判断arg1 中是否还有剩余 if (arg1.size() > 0) result.addAll(arg1); return result; }}
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
新建一个list,然后用两个for循环,外层for循环用list1,内层循环用list2,外层循环每取一个就和内层中的每一个元素去比较,先比较String[0],如果相同就把两个string[1]相加,内层循环结束后,把这个新的string[]写入新建的list中去。如此循环就ok了,至于细节,自己去写代码吧
------解决方案--------------------------------------------------------
具体代码, 我想上面已经给出思路了.
此处我想对你说的事, for(int i=0 ; i< list.size();i++)
这里的list.size() 确实是很耗性能的。应为你每一次都回去计算list的大小。
for(int i=0,j=list.size();i<j;i++) 这样效率提高不少!!!
相关解决方案
- IE不支持JQuery吗?解决方法
- request.setAttribute("list" "''");该怎么解决
- boa+cgi+sqlite3【基于web的数据采集并动态显示】解决方法
- cgi提取文件内容?解决方法
- Hibernate 的query.list()的有关问题
- java.lang.NoSuchMethodException: setId([Ljava.lang.String;)解决方法
- s标签 图片src 当action 解析?解决方法
- CAPTCHA 模块中 ajax form 导致CAPTCHA session reuse attack detected异常,解决方法
- java编程思想.解决方法
- SSH框架导入struts,hibernate,spring分先后顺序吗>>解决方法
- List 的removeAll方法如何用
- 关于遮罩层的。解决方法
- oracle 最近的时间(而不是前一天的时间) 跪求sql语句 。解决方法
- web service No services have been found.解决方法
- socket.connect(socketAddress,timeout ))解决方法
- description The requested resource (/gongqiu/goindex.action) is not available.解决方法
- 关于在struts2中怎么将.action加入到web.xml中的<welcome-file-list>上 急
- List items = upload.parseRequest(request);替空kindeditor SpringMvc
- javascript中===什么意思?解决方法
- struts工作流程~解决方法
- 求struts2玩的顺的人!解决方法
- 在JSP中,List<String> str_list这个集合如何遍历呢
- Mybatis的mapper.是个接口?解决方法
- 求教一个关于两个list的类似求并集的算法。解决方法
- jquery+ajax网页被卡死,cpu爆掉! - -解决方法
- 怎样实现分页.解决方法
- 关于<welcome-file-list>的疑问。初学者郁闷哦
- mapping.findForward()执行后,没有跳转页面?解决方法
- Tomcat7 不支持这句代码,为什么?解决方法
- 经典<<thinking in java >>电子书+课后习题解答.解决方法