求一java算法

有一个Map,里面存放着
{
{a,a_value},
{b,b_value},
{c,c_value},
{d,d_value},
{e,e_value},
{d2,d2_value},
{e2,e2_value},
{d3,d3_value},
{e3,e3_value}

}

现在有个要求,把上面的数据按以下的方式输出:
a:a_value
b:b_value
c:c_value
d:d_value
e:e_value
d:d2_value
e:e2_value
d:d3_value

e:e3_value

PS:不能使用IdentityHashMap和Map.Entry

[code="java"]Map map=new TreeMap(new Comparator(){
public int compare(Object o1, Object o2) {
String str1=(String)o1;
String str2=(String)o2;
if(str1.length()==1&&str2.length()==1){
return str1.compareTo(str2);
}
if(str1.length()==2&&str2.length()==2){
char char1=str1.charAt(1);
char char2=str2.charAt(1);
if(char1!=char2){
return char1>char2?1:-1;

}else{
return str1.charAt(1)>str2.charAt(1)?1:-1;
}

            }
            return str1.length()>str2.length()?1:-1;

        }

    });[/code]

试试

用TreeMap排序

用LinkedHashMap,这样map就有序了
然后for(Iterator it = map.iterator; it.hasNext; )
不知道符不符合你的需求

循环排序一下

[quote]恩,谢谢你的解答,如果这道题换成用数组来实现的话可以吗?[/quote]
可以多维数组实现。

可以呀,加我QQ503229799

package com.text;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class testMap {
public static void main(String[] args) {
HashMap hm = new HashMap();
hm.put("a", "a_value");
hm.put("b", "b_value");
hm.put("c", "c_value");
hm.put("d", "d_value");
hm.put("e", "e_value");
hm.put("f", "f_value");
Set s = hm.keySet();
// for (Iterator iterator = s.iterator(); iterator.hasNext();) {
// String str = (String) iterator.next();
// System.out.println(str + ":" + hm.get(str));
// }
System.out.println(s.size());
String[] a = s.toArray(new String[s.size()]);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
System.out.println(a[i] + ":" + hm.get(a[i]));
}

     } 

}
我帮你写了2中方法 set集合都是无序的你需要排序下排序很简单我就不用写了

[code="java"]

import java.util.Arrays;

public class Record implements Comparable {
private final String id;
private final String value;

public Record(String id, String value) {
    super();
    this.id = id;
    this.value = value;
}

public int compareTo(Record o) {
    String id1 = id;
    String id2 = o.id;
    int n1 = id1.length();
    int n2 = id2.length();
    if (n1 > n2)
        return 1;
    else if (n1 < n2)
        return -1;
    for (int i = n1 - 1; i >= 0; i--) {
        char ch1 = id1.charAt(i);
        char ch2 = id2.charAt(i);
        if (ch1 > ch2)
            return 1;
        else if (ch1 < ch2)
            return -1;
    }
    return 0;

}

public String toString() {
    return id + "," + value;
}

public static void main(String[] args) {
    Record[] records = { new Record("a", "a_value"), new Record("b", "b_value"),
            new Record("c", "c_value"), new Record("d", "d_value"), new Record("e", "e_value"),
            new Record("d2", "d2_value"), new Record("e2", "e2_value"),
            new Record("d3", "d3_value"), new Record("e3", "e3_value") };
    Arrays.sort(records);
    for (Record r : records) {
        System.out.println(r);
    }
}

[/code]

其实这么简单的问题,都够不上称之为“算法”

[quote]目前我是使用以下的做法来实现重复Key的Map,但是觉得性能不忧,想找些比较高效的算法实现。[/quote]
假如你想高效,就别老用map,用多维数组可以解决,但是这个和你初衷想法应该不太一样。

其实java的数据结构已经被封装成这样了,性能上其实提高空间不是太大了。

[quote]MAP是在接口上已经定死了,我目前是想把发过来的map里面的数据取出来放进到数组里面处理。[/quote]
那你必然得有循环map到数组的过程 这个也算是性能影响的一部分了。

[quote]题意要的不是排序,是需要你把一个MAP中近似的KEY在VALUE不变的情况下转化成相似的KEY进行顺序输出[/quote]
你不排序,又怎么顺序输出?!
我的代码已经可以把map转成Record类型数值,直接排序,应该算快的了。