一个排好序的数组(如 1 1 1 2 2 3 4 5 5 6 7 8 8),找出相同的数组分为一组,怎么写效率高?Java
2个回答
展开全部
先问下 你的需求的结果 是这样的吗?
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
}
这样就可以 拿到 结果数组
展开全部
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-------------------");
}
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-------------------");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询