求一个算法

ruanwxh 2010-07-13 06:12:21
在java 中
有一个int[]类型的ArrayList保存下面的数据
像下面这种:

id,oid,数字....
1,1,20,20,60
1,2,40,50,50
2,3,50,60,70

现在要根据id相同 将数字相加

这是我写的算法,性能方面不知道如何,请高手们指导下,或是更好的方法,也可以提下

list原来的数据,allList新数据
int[] tempData = new int[10];
for(int index=0;index<list.size();index++){
int[] data = (int[])list.get(index);
int[] allData = new int[10];
InitData(allData);
if(index == 0){
tempData = data;
}else{
if(tempData[0] == data[0]){
for(int i=2;i<data.length && i<tempData.length;i++)
tempData[i] += data[i];
}else{
for(int i=0;i<allData.length && i<tempData.length;i++)
allData[i] = tempData[i];
tempData = data;
allList.add(allData);
}
}
}
allList.add(tempData);

...全文
122 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
princess_rosie 2010-07-13
  • 打赏
  • 举报
回复

每天回帖即可获得10分可用分!
thegodofwar 2010-07-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lacus87 的回复:]
回2楼:
map为空或map中不含i[0]的key

提问closewbq:

我通常写的是
map.put(i[0],(map.get(i[0]==null)?i[3]:map.get(i[0])+i[3]));

逻辑貌似和你的一样,但是你先判断了map是否为空,像我这样写会不会出什么问题啊?
[/Quote]
不会有问题,但是效率比那个可能稍低
ruanwxh 2010-07-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 closewbq 的回复:]
Java code

public static void main(String[] args){
int[] a = { 1, 1, 20, 20, 60 };
int[] b = { 1, 2, 40, 50, 50 };
int[] c = { 2, 3, 50, 60, 70 };
List<int[]> lis……
[/Quote]
我需要相加的数字不止一个,如果这样的map要创建多个吗?还需要转化成list?有没有更好的方法
WYhack 2010-07-13
  • 打赏
  • 举报
回复
Map忘了
lacus87 2010-07-13
  • 打赏
  • 举报
回复
回2楼:
map为空或map中不含i[0]的key

提问closewbq:

我通常写的是
map.put(i[0],(map.get(i[0]==null)?i[3]:map.get(i[0])+i[3]));

逻辑貌似和你的一样,但是你先判断了map是否为空,像我这样写会不会出什么问题啊?
shengfengluanshi 2010-07-13
  • 打赏
  • 举报
回复
map没有元素或者不包含键值为i[0]
yekang10 2010-07-13
  • 打赏
  • 举报
回复
菜鸟要学习
if(map.isEmpty()||!map.containsKey(i[0]))

有点看不懂这句话
这句话是什么意思啊???高手解释哈呵呵谢谢了
closewbq 2010-07-13
  • 打赏
  • 举报
回复

public static void main(String[] args){
int[] a = { 1, 1, 20, 20, 60 };
int[] b = { 1, 2, 40, 50, 50 };
int[] c = { 2, 3, 50, 60, 70 };
List<int[]> list = new ArrayList<int[]>();
list.add(a);
list.add(b);
list.add(c);
//上面是创造数据
Map<Integer,Integer> map=new HashMap<Integer,Integer>();
for(int[] i:list){
if(map.isEmpty()||!map.containsKey(i[0]))
map.put(i[0], i[3]);
else
map.put(i[0], map.get(i[0])+i[3]);

}
System.out.println(map);
}

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧