先实现一个Comparator去排序一下,然后再慢慢处理吧
另外,
1 10
这应该是一个类的两个成员吧
另外,
1 10
这应该是一个类的两个成员吧
解决方案 »
- java文件中 把1-100中的质数,放到一数组中,在线等
- swing组建里面,怎么使用gif文件创建icon图标,以及icon添加button里面
- 求大虾帮忙看一下这个IO流的问题
- 求组播通信的例子,最好传输的是序列化的对象
- java 泛型
- 求jbulider2005的教程!!
- 请问在sql server 2000 中一个表的text字段怎么取出来啊
- 急急急!高手请帮忙!weblogic下的jndi怎么不起作用?
- 搞了一个星期了,真的急死我了,请各位大哥大姐帮帮忙!看看我的关于查询数据库的问题!一定加分!
- java中如何获得字符的ascii码值!
- Delphi是什么啊?
- 关于Session的一些问题
public static void main(String[] args) {
// 1 10
// 1 20
// 2 10
// 3 57
// 1 2
// 3 24
List strList = new ArrayList();
List one = new ArrayList();
List two = new ArrayList();
List three = new ArrayList();
strList.add(new int[]{1, 10});
strList.add(new int[]{1, 20});
strList.add(new int[]{2, 10});
strList.add(new int[]{3, 57});
strList.add(new int[]{1, 2});
strList.add(new int[]{3, 24});
for(int i=0;i<strList.size();i++){
int[] temp = (int[]) strList.get(i);
if(temp[0]==1){
one.add(temp[1]);
}else if(temp[0]==2){
two.add(temp[1]);
}else if(temp[0]==3){
three.add(temp[1]);
}
}
System.out.println("1: "+one.get(0)+","+one.get(1)+","+one.get(2));
System.out.println("2: "+two.get(0));
System.out.println("3: "+three.get(0)+","+three.get(1));
}
想到就写了,也许有更简单的算法。最后打印只是做个样子,自己看着办吧
List 里面的元素不是固定的,是从数据库里面读取的
准确说List 有如下2列
A B当A里面的值相同的时候,B的值就合计,以逗号隔开
如何
public static void main(String[] args) {
List list = new ArrayList();
Userinfo uinfo = new Userinfo("1", "10");
Userinfo uinfo1 = new Userinfo("1", "20");
Userinfo uinfo2 = new Userinfo("2", "30");
Userinfo uinfo3 = new Userinfo("3", "340");
Userinfo uinfo4 = new Userinfo("1", "50");
list.add(uinfo);
list.add(uinfo1);
list.add(uinfo2);
list.add(uinfo3);
list.add(uinfo4); List listb = list;
String age = "";
for (int i = 0; i < list.size(); i++) {
Userinfo user = (Userinfo) list.get(i);
for (int j = i; j < listb.size(); j++) {
Userinfo info = (Userinfo) listb.get(j);
if (user.getUserid().equals(info.getUserid())) {
age = age + info.getAge() + ",";
}
}
System.out.println(user.getUserid() + "_" + age);
age = "";
listb.remove(i);
}
}
结果如下:
1_10,20,50,
2_30,
1_50,第三条记录错了,应该是3_340
合计的list有其他的用处
准确说List 有如下2列
A B当A里面的值相同的时候,B的值就合计,以逗号隔开我的不是就能用?关键你数据库出来的是什么样子?
//A,List<B>
Map<Integer, List<Integer>> total = new HashMap<Integer, List<Integer>>();
//rs is your resultset
while (rs) {
if (total.containsKey(rs.getInt(1))) {
total.get(rs.getInt(1)).add(rs.getInt(2))
}
else {
List<Integer> list = new ArrayList<Integer>();
list.add(rs.getInt(2));
total.put(rs.getInt(1), list);
}
}不知道满足你的要求不
package str;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class Calculator { /**
* @param args
*/
public static void main(String[] args) {
// 1 10
// 1 20
// 2 10
// 3 57
// 1 2
// 3 24
List strList = new ArrayList();
Map dataMap = new HashMap();
strList.add(new String[]{"1", "10"});
strList.add(new String[]{"1", "20"});
strList.add(new String[]{"2", "10"});
strList.add(new String[]{"3", "57"});
strList.add(new String[]{"1", "2"});
strList.add(new String[]{"3", "24"});
for(int i=0;i<strList.size();i++){
String[] temp = (String[]) strList.get(i);
String value = getMapValue(dataMap, temp);
dataMap.put(temp[0], value);
}
String one = (String) dataMap.get("1");
String two = (String) dataMap.get("2");
String three = (String) dataMap.get("3");
System.out.println("1: "+one);
System.out.println("2: "+two);
System.out.println("3: "+three);
} private static String getMapValue(Map dataMap, String[] temp) {
String mapValue = (String)dataMap.get(temp[0]);
String returnValue = temp[1];
if(mapValue!=null){
returnValue=mapValue+","+temp[1];
}
return returnValue;
}
}
Map<Integer,List<Integer>> map = new HashMap<Integer,List<Integer>>();
for(int i=0;i<list.size();i++){
Entry tempEntry = list.get(i);
Integer member1 = Integer.valueOf(tempEntry.getMember1());
Integer member2 = Integer.valueOf(tempEntry.getMember2());
List<Integer> value = map.get(member1);
if(value != null){
value.add(member2);
}else{
value = new ArrayList<Integer>();
value.add(member2);
map.put(member1, value);
}
}
return map;
}
class Entry{
private int member1;
private int member2;
public Entry(int member1,int member2){
this.member1 = member1;
this.member2 = member2;
}
public int getMember1() {
return member1;
}
public void setMember1(int member1) {
this.member1 = member1;
}
public int getMember2() {
return member2;
}
public void setMember2(int member2) {
this.member2 = member2;
}
}
假如从数据库读取的值为1到10000,
按照你的写法,需要些多少dataMap.get()strList.add(new String[] { "33", "24" });
strList.add(new String[] { "352", "24" });假如2行值,输入结果还是
1: 10,20,2
2: 10
3: 57,24
1: 10,20,2
2: 10
3: 57,24哦,你理解错我意思
都已经进map了,还在乎输出吗?
package str;import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;public class Calculator { /**
* @param args
*/
public static void main(String[] args) {
// 1 10
// 1 20
// 2 10
// 3 57
// 1 2
// 3 24
List strList = new ArrayList();
Map dataMap = new HashMap();
strList.add(new String[]{"1", "10"});
strList.add(new String[]{"1", "20"});
strList.add(new String[]{"2", "10"});
strList.add(new String[]{"3", "57"});
strList.add(new String[]{"1", "2"});
strList.add(new String[]{"3", "24"});
strList.add(new String[] { "33", "24" });
strList.add(new String[] { "352", "24" });
for(int i=0;i<strList.size();i++){
String[] temp = (String[]) strList.get(i);
String value = getMapValue(dataMap, temp);
dataMap.put(temp[0], value);
}
Set key = dataMap.keySet();
Iterator it = key.iterator();
while(it.hasNext()){
String keyStr = (String) it.next();
String value = (String) dataMap.get(keyStr);
System.out.println(keyStr+": "+value);
}
} private static String getMapValue(Map dataMap, String[] temp) {
String mapValue = (String)dataMap.get(temp[0]);
String returnValue = temp[1];
if(mapValue!=null){
returnValue=mapValue+","+temp[1];
}
return returnValue;
}
}
然后遍历一遍结果集,把第一列相同的记录做成一个数组就行了。
至于遍历的算法,应该就很简单了吧,把前一个的第一列和后一个的第一列比,不一样则新生成一个数组。一样则add。
方法确实可行,谢谢了,要不帮我看看我这代码的问题在那
public static void main(String[] args) {
List list = new ArrayList();
Userinfo uinfo = new Userinfo("1", "10");
Userinfo uinfo1 = new Userinfo("1", "20");
Userinfo uinfo2 = new Userinfo("2", "30");
Userinfo uinfo3 = new Userinfo("3", "340");
Userinfo uinfo4 = new Userinfo("1", "50");
list.add(uinfo);
list.add(uinfo1);
list.add(uinfo2);
list.add(uinfo3);
list.add(uinfo4); List listb = list;
String age = "";
for (int i = 0; i < list.size(); i++) {
Userinfo user = (Userinfo) list.get(i);
for (int j = i; j < listb.size(); j++) {
Userinfo info = (Userinfo) listb.get(j);
if (user.getUserid().equals(info.getUserid())) {
age = age + info.getAge() + ",";
}
}
System.out.println(user.getUserid() + "_" + age);
list.remove(i);
age = "";
}
}输出结果为
1_10,20,50,
2_30,
1_50,明显错了,这里该怎么改啊?
strList.add(new int[]{1, 10});
strList.add(new int[]{1, 20});
strList.add(new int[]{2, 10});
strList.add(new int[]{3, 57});
strList.add(new int[]{1, 2});
strList.add(new int[]{3, 24});
Map<Integer,List<Integer>> map = new HashMap<Integer, List<Integer>>();
for(int[] e: strList){
if(! map.containsKey(e[0])){
map.put(e[0], new ArrayList<Integer>());
}
map.get(e[0]).add(e[1]);
}
for(Map.Entry<Integer, List<Integer>> entry : map.entrySet()){
System.out.println(entry.getKey()+" " + entry.getValue());
}
import java.util.List;public class OtherOrder { public static void main(String[] args) {
List list = new ArrayList();
String[] uinfo = new String[] { "1", "10" };
String[] uinfo1 = new String[] { "1", "20" };
String[] uinfo2 = new String[] { "2", "30" };
String[] uinfo3 = new String[] { "3", "340" };
String[] uinfo4 = new String[] { "1", "50" };
list.add(uinfo);
list.add(uinfo1);
list.add(uinfo2);
list.add(uinfo3);
list.add(uinfo4); List listb = new ArrayList();
listb.add(uinfo);
listb.add(uinfo1);
listb.add(uinfo2);
listb.add(uinfo3);
listb.add(uinfo4); String age = "";
int currentP = 0;
while (list.size() > 0) {
String[] user = (String[]) list.get(0);
for (int j = 0; j < listb.size(); j++) {
String[] info = (String[]) listb.get(j);
if (user[0].equals(info[0])) {
age = age + info[1] + ",";
listb.remove(j);
list.remove(j);
}
}
System.out.println(user[0] + "_" + age);
age = "";
}
}
}
问题出在几个地方
1、List listb = list;
这算什么?listb成为了list的一个引用。你在remove的时候2个是一起remove,这造成了for循环的结束条件一直在变。这种写法非常不可取。直接导致你的get(index)方法中index一直在变。
2、举个例子1_10,20,50, 你remove了里面的10,却没有办法remove其中的20和50,再下次循环时,依然要检查20和50的值,这影响效率。
3、痘号的拼接算法,永远后面会有个多余符号
其他没了,最严重的问题就是下标移动。在我修改你的算法中有一句。
String[] user = (String[]) list.get(0);
请仔细理解为什么循环都永远取0而不用递增了。
List listb = list;而应该用clone()但是即使clone()了,也不能复制出list里的对象,还是需要循环,效率更低,这部分,自己查资料。
listb.remove(j);
list.remove(j);
这2句是为了能够使2个list同步,保持index的一致性。把符合条件的数据直接删除,防止外层循环再次检查已经保留数据。