黑马程序员技术交流社区
标题:
怎么用TreeMap里的Value做比较。【已解决】
[打印本页]
作者:
韩慧阳
时间:
2012-5-17 10:30
标题:
怎么用TreeMap里的Value做比较。【已解决】
本帖最后由 韩慧阳 于 2012-5-17 15:14 编辑
毕老师视频中这样一个例子:找出字符串中每个字符出现的次数。
import java.util.*;
class charCountTest implements Comparable<>
{
public static void main(String[] args)
{
String s=charCount("aabbccfcdddd");
System.out.println(s);
}
public static String charCount(String str)
{
char[] s=str.toCharArray();
TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>();
int count=0;
for(int x=0;x<s.length;x++)
{
if(!(s[x]>='a' && s[x]<='z' || s[x]>='A' && s[x]<='Z'))
continue;
Integer value=tm.get(s[x]);
if(value!=null)
{
count=value;
}
count++;
tm.put(s[x],count);
count=0;
}
StringBuilder sb=new StringBuilder();
Set<Map.Entry<Character,Integer>> entrySet=tm.entrySet();
Iterator<Map.Entry<Character,Integer>> it=entrySet.iterator();
while(it.hasNext())
{
Map.Entry<Character,Integer> me=it.next();
Character ch=me.getKey();
Integer value=me.getValue();
sb.append(ch+" : "+value+"...");
}
return sb.toString();
}
}
这个里面的键是Character,因为在Character中默认实现了Comparable的compareTo,所以本身就具备了比较性。
如果我想用Value做比较并输出怎么做?
映射依然是<Character,Integer> ,输出结果按照字符出现次数的大小排序,也就是说把Value作为比较条件。
作者:
李哲
时间:
2012-5-17 10:45
按照网上的指导,下面的代码,是我以前写的。你可以看一下。简单说,就是一个静态函数,一个构造函数的使用。
public class TreeMapList {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map tml=new TreeMap();
tml.put("lisi", 18);
tml.put("zhangsan", 14);
tml.put("zhaoliu", 13);
tml.put("wangwu", 17);
tml.put("c", 17);
tml.put("d", 17);
tml.put("f", 17);
List l1=new ArrayList(tml.entrySet());
Collections.sort(l1, new Com());
Iterator it=l1.iterator();
while(it.hasNext()){
Map.Entry me=(Map.Entry)it.next();
System.out.println(me.getKey() + "::" + me.getValue());
}
}
}
public class Com implements Comparator {
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
Map.Entry m1=(Map.Entry)o1;
Map.Entry m2=(Map.Entry)o2;
return ((Integer) m1.getValue()).compareTo((Integer)m2.getValue());
}
}
复制代码
作者:
黑马张立国
时间:
2012-5-17 10:47
treemap有(Comparator<? super K> comparator) 的构造方法在比较时取值,不容易取出value,所以不好比较。
把tree转成Map.Entry<K,V>对象,后该对象有getKey和getValue方法,这样就很方便取出值了,然后再实现自己的比较器,这样就可以了。
作者:
—__
时间:
2012-5-17 11:03
给楼主提供一个思路 首先是取字母出现的次数,也就是应用到键值对的概念,但是他是分两部分实现的,一部分是比较,a 有几个啊 b 有几个, 比如a 是4个 b 是5个 然后用到代码
StringBuilder sb=new StringBuilder();
Set<Map.Entry<Character,Integer>> entrySet=tm.entrySet();
Iterator<Map.Entry<Character,Integer>> it=entrySet.iterator();
while(it.hasNext())
{
Map.Entry<Character,Integer> me=it.next();
Character ch=me.getKey();
Integer value=me.getValue();
sb.append(ch+" : "+value+"...");
}
将 a 对应为 4 b对应为5 输入到map集合中,换句话说 假如a 代表的是 “zhagsan” 4代表的是 21 而b 代表的是"lisi" 5代表的是 23
比如 x.add("zhangsan",21);
x.add("lisi",23);
你可以选择把zhangsan lisi 传入到map集合中,然后map集合按照字母排列来排列,
那么你是否可以把他们传入到其他集合中呢?我当初是传入到了ArrayList 集合中,然后用数字做的比较
楼主按照这个思路想想呢,具体代码我就不打了 今天正好提交入学测试,怕被老师说透题 透代码哈
作者:
韩慧阳
时间:
2012-5-17 12:09
3楼你的意思是把你的意思是把键传入到ArrayList中吗??是一种思路,我试试吧!
作者:
suiabing
时间:
2012-5-17 12:20
貌似是考题,还是自己答吧,给你答案了 也就没啥用了
作者:
韩慧阳
时间:
2012-5-17 13:03
考题??? 酷!
作者:
韩慧阳
时间:
2012-5-17 15:10
我写出来了 谢谢!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2