求一个数组的算法

雨松MOMO 2010-12-22 12:57:47
有2个String数组 长度一摸一样 求一个算法 先在name中把相同的字符串合并成一个,然后在num中也相应的合并。

例如

//举一个例子 比如现在有2个数组
String []name ={"aa","aa","bb","bb","cc"} //这只是一个范例 因为程序中调用的时候数组元素是会变化的
String []num ={"123","234","235","543","145"} //这只是一个范例 因为程序中调用的时候数组元素是会变化的

//我想要的结果是
String []name = {"aa","bb","cc"};
String []num = {"123,234", "235,543", "145"};


...全文
201 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
雨松MOMO 2010-12-22
  • 打赏
  • 举报
回复
高手速度来。。
qybao 2010-12-22
  • 打赏
  • 举报
回复
再给你一个用map实现的方法,这个跟上面的区别是,用map不一定能保证跟原来的数组的顺序一致
自己慢慢体会吧

import java.util.*;

public class Test {
public static void main(String[] args) {
try {
String []name ={"aa","aa","bb","bb","cc"};
String []num ={"123","234","235","543","145"};
Map<String, String> map = new HashMap<String, String>();
for (int i=0; i<name.length; i++) {
String v = map.get(name[i]);
if (v == null) {
map.put(name[i], num[i]);
} else {
map.put(name[i], v+","+num[i]);
}
}
name = map.keySet().toArray(new String[0]);
num = map.values().toArray(new String[0]);
System.out.println(Arrays.toString(name));
System.out.println(Arrays.toString(num));
} catch (Throwable e) {
e.printStackTrace();
}
}
}
qybao 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xys289187120 的回复:]
楼上的编译不通过
[/Quote]
怎么会编译通不过了?
jdk多少的?程序都写到这份上,编译出问题就不会自己找原因吗?
以下测试通过,跟和上面代码完全一样,输出结果
[aa, bb, cc]
[123,234, 235,543, 145]


import java.util.*;

public class Test {
public static void main(String[] args) {
try {
String []name ={"aa","aa","bb","bb","cc"};
String []num ={"123","234","235","543","145"};
List<String> nameList = new ArrayList<String>();
List<String> numList = new ArrayList<String>();
for (String s : name) {
if (nameList.contains(s)) {
continue;
}
nameList.add(s);
int idx = Arrays.binarySearch(name, 0, name.length, s);
StringBuilder sb = new StringBuilder(num[idx]);
while (true) {
idx = Arrays.binarySearch(name, idx+1, name.length, s);
if (idx < 0) {
break;
}
sb.append(",").append(num[idx]);
}
numList.add(sb.toString());
}
name = nameList.toArray(new String[0]);
num = numList.toArray(new String[0]);
System.out.println(Arrays.toString(name));
System.out.println(Arrays.toString(num));
} catch (Throwable e) {
e.printStackTrace();
}
}
}


雨松MOMO 2010-12-22
  • 打赏
  • 举报
回复
高手在那里啊····
雨松MOMO 2010-12-22
  • 打赏
  • 举报
回复
高手快来啊
雨松MOMO 2010-12-22
  • 打赏
  • 举报
回复
高手快来啊!!!
e9876 2010-12-22
  • 打赏
  • 举报
回复
2楼的应该可以了吧。
雨松MOMO 2010-12-22
  • 打赏
  • 举报
回复
高手快来啊 我在线等啊
雨松MOMO 2010-12-22
  • 打赏
  • 举报
回复
楼上的编译不通过
qybao 2010-12-22
  • 打赏
  • 举报
回复

String []name ={"aa","aa","bb","bb","cc"};
String []num ={"123","234","235","543","145"};
List<String> nameList = new ArrayList<String>();
List<String> numList = new ArrayList<String>();
for (String s : name) {
if (nameList.contains(s)) {
continue;
}
nameList.add(s);
int idx = Arrays.binarySearch(name, 0, name.length, s);
StringBuilder sb = new StringBuilder(num[idx]);
while (true) {
idx = Arrays.binarySearch(name, idx+1, name.length, s);
if (idx < 0) {
break;
}
sb.append(",").append(num[idx]);
}
numList.add(sb.toString());
}
name = nameList.toArray(new String[0]);
num = numList.toArray(new String[0]);
System.out.println(Arrays.toString(name));
System.out.println(Arrays.toString(num));
雨松MOMO 2010-12-22
  • 打赏
  • 举报
回复
高手速度来
mouhk 2010-12-22
  • 打赏
  • 举报
回复
用一个哈希表来记录数组name是否重复,遍历处理其中的元素就是了,如果重复,则对应的处理num。我觉得这个算法思路还是很明确的三。
hmc1985 2010-12-22
  • 打赏
  • 举报
回复
在j2me里面,用Hashtable和Vector都可以实现这个功能
Inhibitory 2010-12-22
  • 打赏
  • 举报
回复

import java.util.Arrays;
import java.util.HashSet;

public class Test {
public static void main(String[] args) {
String []name = {"aa","aa","bb","bb","cc"}; //这只是一个范例 因为程序中调用的时候数组元素是会变化的
String []num = {"123","234","235","543","145"}; //这只是一个范例 因为程序中调用的时候数组元素是会变化的

name = Test.uniqueArray(name);
num = Test.uniqueArray(num);

System.out.println(Arrays.toString(name));
System.out.println(Arrays.toString(num));
}

// 去掉数组中重复的元素
public static String[] uniqueArray(String[] arr) {
return new HashSet<String>(Arrays.asList(arr)).toArray(new String[0]);
}
}

Inhibitory 2010-12-22
  • 打赏
  • 举报
回复

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class Test {
public static void main(String[] args) {
String []name ={"aa","aa","bb","bb","cc"}; //这只是一个范例 因为程序中调用的时候数组元素是会变化的
String []num ={"123","234","235","543","145"}; //这只是一个范例 因为程序中调用的时候数组元素是会变化的

Set<String> set = new HashSet<String>();
for (String n : name) {
set.add(n);
}

name = set.toArray(new String[0]);
System.out.println(Arrays.toString(name));
}
}
qybao 2010-12-22
  • 打赏
  • 举报
回复
原来LZ是J2ME,那是没有map和list的,可以用HashTable


import java.util.*;

public class Test {
public static void main(String[] args) {
try {
String []name ={"aa","aa","bb","bb","cc"};
String []num ={"123","234","235","543","145"};
HashTable map = new HashTable();
for (int i=0; i<name.length; i++) {
Object v = map.get(name[i]);
if (v == null) {
map.put(name[i], num[i]);
} else {
map.put(name[i], v+","+num[i]);
}
}
name = new String[map.size()];
for (int k=0, Enumeration e = map.keys(); e.hasMoreElements(); k++) {
name[k] = String.valueOf(e.nextElement());
System.out.print(name[k]+"\t");
}
num = new String[map.size()];
for (int k=0, Enumeration e = map.elements(); e.hasMoreElements(); k++) {
num[k] = String.valueOf(e.nextElement());
System.out.print(num[k]+"\t");
}
} catch (Throwable e) {
e.printStackTrace();
}
}
}

13,100

社区成员

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

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