问题描述
有一个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_valueb:b_valuec:c_valued:d_valuee:e_valued:d2_valuee:e2_valued:d3_valuee:e3_value-------------PS:不能使用IdentityHashMap和Map.Entry 问题补充:恩,谢谢你的解答,如果这道题换成用数组来实现的话可以吗?AngelAndAngel 写道
解决方案
Map<String, String> map=new TreeMap<String, String>(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;}});试试
解决方案二:
引用题意要的不是排序,是需要你把一个MAP中近似的KEY在VALUE不变的情况下转化成相似的KEY进行顺序输出你不排序,又怎么顺序输出?!我的代码已经可以把map转成Record类型数值,直接排序,应该算快的了。
解决方案三:
引用MAP是在接口上已经定死了,我目前是想把发过来的map里面的数据取出来放进到数组里面处理。那你必然得有循环map到数组的过程 这个也算是性能影响的一部分了。
解决方案四:
引用目前我是使用以下的做法来实现重复Key的Map,但是觉得性能不忧,想找些比较高效的算法实现。假如你想高效,就别老用map,用多维数组可以解决,但是这个和你初衷想法应该不太一样。其实java的数据结构已经被封装成这样了,性能上其实提高空间不是太大了。
解决方案五:
import java.util.Arrays;public class Record implements Comparable<Record> {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);}}其实这么简单的问题,都够不上称之为“算法”
解决方案六:
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<String> 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集合都是无序的你需要排序下排序很简单我就不用写了
解决方案七:
可以呀,加我QQ503229799
解决方案八:
引用恩,谢谢你的解答,如果这道题换成用数组来实现的话可以吗?可以多维数组实现。
解决方案九:
循环排序一下
解决方案十:
用LinkedHashMap,这样map就有序了然后for(Iterator it = map.iterator; it.hasNext; )不知道符不符合你的需求
解决方案十一:
用TreeMap排序