一个标签从标签数组中取值方法实现 逻辑方法 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 String[] add = { "北京", "上海", "四川", "四川", "北京", "四川" }; Arrays.sort(add); Map<String, String> m = new TreeMap<String, String>(); for (String d : add) { m.put(d, d); } for (String key : m.keySet()) { System.out.println(key); } 你这个并不是按单词个数排序。而是按照String排序。我把String[] add = { "北京", "上海", "四川", "四川", "北京", "四川" };变成String[] add = { "北京", "上海", "四川", "四川", "北京", "四川", "上海", "上海" , "上海", "上海" , "上海", "上海" };排序结果一样。试试。 不管哪种方法都需要两个条件, 当多个地址出现次数相同时,还是要有个权重来经行二次筛选。权重的设计不应该是一个城市一个权重, 不然100个地址100个权重么? 建议你一个权重可以包含多个地址:比如1级对应北、上、广、深, 2级对应四川、浙江、江苏等。如果先按出现次数,就用Map统计下add[] 里面每个地址出现的次数,最大的为结果,如果有相同的再取权重,如果权重也相同那你就随意吧,从中选一个。如果按权重,那你从高到低依次查询, 同一权重出现多个再按出现次数。 实现的话可能稍微有点绕。 可以使用Map<Integer, List<String>> weight; 类似这样来保存地址的权重信息。 String[] add = { "北京", "上海", "四川", "四川", "北京", "四川", "上海", "上海", "上海", "上海", "上海", "上海" }; Arrays.sort(add); Map<String, Integer> m = new TreeMap<String, Integer>(); for (String d : add) { if (m.get(d) != null) { m.put(d, m.get(d) + 1); } else { m.put(d, 1); } } List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(m.entrySet()); Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { return (o1.getValue() - o2.getValue()); } }); for (Map.Entry<String, Integer> o : list) { System.out.println(o); } 还有一个方法是按权重进行显示String[] add = {"北京",“上海”,"四川",“四川”,"北京","四川","重庆"};优先级 重庆 > 上海 > 北京 > 四川"地址":"重庆"(如果String数组没有重庆就显示上海,依此类推)。 没明白啊。 这个 优先级 重庆 > 上海 > 北京 > 四川 哪里来的是不是有这个直接去string数组里面找? 是从string数组里面找。就是说数组中不管数组中有什么值。只要有重庆就显示重庆,如果没有重庆就打有没有上海。有上海就显示上海。依次类推。 String[] add = {"北京",“上海”,"四川",“四川”,"北京","四川"};然后直接索引?[code=java]String[] add = { "北京", "上海", "四川", "四川", "北京", "四川", "上海", "上海", "上海", "上海", "上海", "上海" }; List<String> list = Arrays.asList(add); 然后直接索引?[code=java]String[] add = { "北京", "上海", "四川", "四川", "北京", "四川", "上海", "上海", "上海", "上海", "上海", "上海" }; List<String> list = Arrays.asList(add); 优先级肯定是先知道的。传进来的String数组是不定的。这个逻辑怎么弄呢? 你String 放到map 里面 根据优先级作为key 取数据。String[] add = { "北京", "上海", "四川", "四川", "北京", "四川", "上海", "上海", "上海","上海", "上海", "上海" }; Map<String,String> m = new HashMap<String,String>(); for (String o : add) { m.put(o, o); } //根据优先级 m.get(key); Java从哪个版本开始就支持多继承了? jdbc连了半天都没连上 关于除去一堆对象数据冗余的问题。 求助eclipse下写的时候没有出错,但是运行就报错 请教论坛高手前辈予以解答有关java非技术问题 树形实例算法续 难道是jre1.6.0_05的bug? 一个很菜的问题,达人来解释一下 java怎么这么垃圾的问题都会出阿??? 哪能下到Forte,要注册码,windows和linux版的 A problem of javaFX 杭电acm 1002 为什么A不去
Arrays.sort(add);
Map<String, String> m = new TreeMap<String, String>();
for (String d : add) {
m.put(d, d);
}
for (String key : m.keySet()) {
System.out.println(key);
}
比如1级对应北、上、广、深, 2级对应四川、浙江、江苏等。如果先按出现次数,就用Map统计下add[] 里面每个地址出现的次数,最大的为结果,如果有相同的再取权重,如果权重也相同那你就随意吧,从中选一个。如果按权重,那你从高到低依次查询, 同一权重出现多个再按出现次数。 实现的话可能稍微有点绕。 可以使用Map<Integer, List<String>> weight; 类似这样来保存地址的权重信息。
"上海", "上海", "上海" };
Arrays.sort(add); Map<String, Integer> m = new TreeMap<String, Integer>();
for (String d : add) {
if (m.get(d) != null) {
m.put(d, m.get(d) + 1);
} else {
m.put(d, 1);
}
} List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(m.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1,
Map.Entry<String, Integer> o2) {
return (o1.getValue() - o2.getValue());
}
}); for (Map.Entry<String, Integer> o : list) {
System.out.println(o);
}
String[] add = {"北京",“上海”,"四川",“四川”,"北京","四川","重庆"};
优先级 重庆 > 上海 > 北京 > 四川
"地址":"重庆"(如果String数组没有重庆就显示上海,依此类推)。
是不是有这个直接去string数组里面找?
"上海", "上海", "上海" };
List<String> list = Arrays.asList(add);
"上海", "上海", "上海" };
List<String> list = Arrays.asList(add);
优先级肯定是先知道的。传进来的String数组是不定的。这个逻辑怎么弄呢?
String[] add = { "北京", "上海", "四川", "四川", "北京", "四川", "上海", "上海", "上海","上海", "上海", "上海" };
Map<String,String> m = new HashMap<String,String>();
for (String o : add) {
m.put(o, o);
}
//根据优先级
m.get(key);