一个排好序的数组(如 1 1 1 2 2 3 4 5 5 6 7 8 8),找出相同的数组分为一组,怎么写效率高?Java

打错字是找出相同的数字分为一组。。求大神,回头追加分。... 打错字 是找出相同的数字分为一组。。求大神,回头追加分。 展开
 我来答
ifeilong
2014-08-18 · TA获得超过8068个赞
知道大有可为答主
回答量:1187
采纳率:100%
帮助的人:807万
展开全部

先问下 你的需求的结果 是这样的吗?

String []a1={1,1,1};
String []a2={2,2};
String []a3={5,5};
String []a4={8,8};
更多追问追答
追问
那些没相同的是单独一个数组。我想找效率高一点的算法
追答

我写了个 方法 :


	/**
 * 将array 分组.
 * 
 * Example 1:
 * if Integer[] array = { 1, 1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 8 };

 * @param array
 *            the array
 * @return the map< t, list< t>>
 */
public static <T> Map<T, List<T>> group(T[] array){
if (null == array){
return null;
}
//视需求  可以换成 HashMap 或者TreeMap
Map<T, List<T>> map = new LinkedHashMap<T, List<T>>(array.length);
for (T t : array){
List<T> valueList = map.get(t);
if (null == valueList){
valueList = new ArrayList<T>();
}
valueList.add(t);
map.put(t, valueList);
}
return map;
}

测试方法:


@Test
public void testGroup(){
Integer[] array = { 1, 1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 8 };

Map<Integer, List<Integer>> group = group(array);
Collection<List<Integer>> values = group.values();

//do  something
}

这样就可以 拿到 结果数组

沧桑的glans
2014-08-18 · TA获得超过297个赞
知道小有建树答主
回答量:207
采纳率:0%
帮助的人:159万
展开全部
Integer[] nums={1,1,1,2,2,3,4,5,5,6,7,8,8};
List<Integer> hay=Arrays.asList(nums);
Map<Integer, List> groups = new HashMap<Integer, List>();
for (Integer key : hay) {
groups.put(key, new ArrayList());
}
for (Integer key1 : hay) {
groups.get(key1).add(key1);
}
for (List<Integer> list: groups.values()) {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("\n-------------------");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式