容器问题 我定义了一个hm 类型为HashMap 并且为这个hm 添加了键值对…然后再定义了lhm 类型为LinkedHashMap 现在我想将hm的键值对放到lhm里面…然后我调用lhm的putAll函数…没有报错,可是当我打印lhm的时候,没有一个键值输出,这是什么原因呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 此回复为自动发出,仅用于显示而已,并无任何其他特殊作用楼主【lrcasd】截止到2008-08-03 12:31:57的历史汇总数据(不包括此帖):发帖的总数量:8 发帖的总分数:300 每贴平均分数:37 回帖的总数量:6 得分贴总数量:0 回帖的得分率:0% 结贴的总数量:6 结贴的总分数:100 无满意结贴数:1 无满意结贴分:20 未结的帖子数:2 未结的总分数:200 结贴的百分比:75.00 % 结分的百分比:33.33 % 无满意结贴率:16.67 % 无满意结分率:20.00 % 楼主加油取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=lrcasd package c11;import java.util.*;/* * 第九题: * * 使用键值对填充HashMap。打印结果,证明是按散列码排序的。 * 取出键值对,按键排序,将结果置入LinkedHashMap。证明 * 后者维持元素插入的顺序。 * * */class FullHashMap{ //private String key; //private String value; private Map hm = new HashMap(); private LinkedHashMap lhm = new LinkedHashMap(); public void put(Object key,Object value){ //this.key = (String)key; hm.put(key, value); } public String get(Object key){ return //"key = " + (String)key + " value = " + (String)hm.get(key); (String)hm.get(key); } /*public String toString(){ return "key = " + key + " " + "value = " + value; }*/ public void printAll(){ System.out.println("key = " + hm.keySet()); System.out.println("value = " + hm.values()); System.out.println("键值对:" + hm); } public void put1(){ //Iterator it = hm.keySet().iterator(); //while(it.hasNext()) //lhm.put(key, value); lhm.putAll((Map)hm); } public void printAll1(){ System.out.println("键值对:" + lhm.values()); } }public class No09 { /** * @param args */ public static void main(String[] args) { // TODO 自动生成方法存根 FullHashMap fhm = new FullHashMap(); fhm.put("Alan", "Hello"); fhm.put("john", "Hello1"); fhm.put("King", "Hello2"); fhm.put("Dom", "Hello3"); fhm.put("jack", "Hello4"); /*fhm.put1("Alan", "Hello"); fhm.put1("john", "Hello1"); fhm.put1("King", "Hello2"); fhm.put1("Dom", "Hello3"); fhm.put1("jack", "Hello4");*/ //System.out.println(fhm.get("Alan")); fhm.printAll(); //fhm.put1(); fhm.printAll1(); }} * 第九题: * * 使用键值对填充HashMap。打印结果,证明是按散列码排序的。 * 取出键值对,按键排序,将结果置入LinkedHashMap。证明 * 后者维持元素插入的顺序。那位高手帮忙做做这题啊 lhm 我怎么没看到你往这个里面写数据呢? fhm.printAll(); fhm.put1(); // 把这个注释去掉后 fhm.printAll1();输出为key = [jack, Alan, john, Dom, King]value = [Hello4, Hello, Hello1, Hello3, Hello2]键值对:{jack=Hello4, Alan=Hello, john=Hello1, Dom=Hello3, King=Hello2}键值对:[Hello4, Hello, Hello1, Hello3, Hello2]我看结果很正常啊! 将hm的结果放到lhm中作为键值对…而不是直接往lhm里输入键值对…请看题目…我不会置换… * 使用键值对填充HashMap。打印结果,证明是按散列码排序的。 * 取出键值对,按键排序,将结果置入LinkedHashMap。证明 * 后者维持元素插入的顺序。谁能把这题目做出来啊 个人理解:"证明是按散列码排序的",应该迭代HashMap.keySet(),打印每个key的hashCode()"取出键值对,按键排序",应该将HashMap.keySet()的所有key放入array或List,然后用Arrays.sort或Collections.sort排序"将结果置入LinkedHashMap",上述排序后的列表List keysfor(int i=0; i<keys.size(); ++i) linkedHashMap.put(keys.get(i), hashMap.get(keys.get(i)));最后打印LinkedHashMap 自学?不用考试的话,明显不用去管什么证明,容器会用就行上面提到的一些方法看jdk api帮助,然后都调通并且会用就可以了 题目我做好啦,帮帮忙看看对不对谢谢了package c11;import java.util.*;/* * 第九题: * * 使用键值对填充HashMap。打印结果,证明是按散列码排序的。 * 取出键值对,按键排序,将结果置入LinkedHashMap。证明 * 后者维持元素插入的顺序。 * * *//* * 我还有个问题: * * 在我这个程序里 Collections.sort 的排序顺序是插入顺序, * 我知道这个函数可以按照 Comparator 这个接口的 compare 函数 * 去排序的,(这个东西返回 -1 0 1 不过我还是不知道它怎样排序的,很模糊呀!) * 现在我想更改一下排序顺序,请问应该在哪里实现接口?compare 函数内部是怎样实现? * 这两点我很模糊,请高手指点一下。 * * */class FullHashMap{ private HashMap hm = new HashMap(); private LinkedHashMap lhm = new LinkedHashMap(); public void put(Object key,Object value){ hm.put(key, value); } public String get(Object key){ return (String)hm.get(key); } public void printAll(){ //遍历hm.keySet(),打印每个key的散列码。 Iterator it = hm.keySet().iterator(); while(it.hasNext()) System.out.println("keyCode = " + it.next().hashCode()); //取出键值对,然后用Collections.sort排序。 it = hm.keySet().iterator(); List lst = new ArrayList(); while(it.hasNext()) lst.add(it.next()); Collections.sort(lst); it = lst.iterator(); System.out.println("After collections sort..."); while(it.hasNext()) System.out.print(it.next() + " "); System.out.println(); //将排序后的结果放进LinkedHashMap中输出。 for(int i = 0;i<lst.size();i++) //lhm的key是排序后的结果,value是排序后key的值。 lhm.put(lst.get(i),hm.get(lst.get(i))); it = lhm.keySet().iterator(); System.out.print("LinkedHashMap keySet : "); while(it.hasNext()) System.out.print(it.next() + " "); System.out.println(); System.out.print("LinkedHashMap Output : " + lhm); System.out.println(); System.out.println(); System.out.println("没有排序前的输出…………………………"); System.out.println("key = " + hm.keySet()); System.out.println("value = " + hm.values()); System.out.println("键值对:" + hm); }}public class No09 { /** * @param args */ public static void main(String[] args) { // TODO 自动生成方法存根 FullHashMap fhm = new FullHashMap(); fhm.put("Alan", "Hello"); fhm.put("john", "Hello1"); fhm.put("King", "Hello2"); fhm.put("Dom", "Hello3"); fhm.put("jack", "Hello4"); //打印全部结果。 fhm.printAll(); }} 哇,你的程序越改越乱。看起来好恶心。第一个证明散列码,我觉得你直接打印出来就可以看到的吧。打印出来的顺序不是你PUT进去的顺序不就证明了啊。第二个是说明放进去保持了原来的顺序。直接把HashMap里的键值对放到LinkedHashMap里,然后直接打印出来如果跟上一个(证明HashMap散列码排序的时候)打印的顺序一致,那表明保持了插入的顺序。这样就足够了吧。还有,Comparator 接口我用过,里面就是一个compare方法,返回你要比较的容器里任意两个值的差值就可以了。可以return o1-o2;(根据关系返回正数,负数和零)然后Collection.sort(L,Comparator c)方法根据C的compare方法返回的值来排序,想一想就知道怎么回事了,只要你以前编写过排序的类。 关于socket网络通信对象流,求助。。。 如何用java模拟Fn+F6组合键 为什么有些Thread.sleep()没被中断? 请教“ 注释模板”的写法: 如何用java代码来查看某个windows服务的当前状态....在线等.....捏着分等前辈 如何取得我的.class所在的路径 关于Locale类型的对象的问题? 求助:关于java解析四则运算的例子 关于java函数? 初学者的问题 对ArrayList中的对象求和求均值后排序 刚开始学java,问一个很基本的问题
楼主【lrcasd】截止到2008-08-03 12:31:57的历史汇总数据(不包括此帖):
发帖的总数量:8 发帖的总分数:300 每贴平均分数:37
回帖的总数量:6 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:6 结贴的总分数:100
无满意结贴数:1 无满意结贴分:20
未结的帖子数:2 未结的总分数:200
结贴的百分比:75.00 % 结分的百分比:33.33 %
无满意结贴率:16.67 % 无满意结分率:20.00 %
楼主加油
取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=lrcasd
package c11;
import java.util.*;
/*
* 第九题:
*
* 使用键值对填充HashMap。打印结果,证明是按散列码排序的。
* 取出键值对,按键排序,将结果置入LinkedHashMap。证明
* 后者维持元素插入的顺序。
*
* */class FullHashMap{
//private String key;
//private String value;
private Map hm = new HashMap();
private LinkedHashMap lhm = new LinkedHashMap();
public void put(Object key,Object value){
//this.key = (String)key;
hm.put(key, value);
}
public String get(Object key){
return //"key = " + (String)key + " value = " + (String)hm.get(key);
(String)hm.get(key);
}
/*public String toString(){
return "key = " + key + " " + "value = " + value;
}*/
public void printAll(){
System.out.println("key = " + hm.keySet());
System.out.println("value = " + hm.values());
System.out.println("键值对:" + hm);
}
public void put1(){
//Iterator it = hm.keySet().iterator();
//while(it.hasNext())
//lhm.put(key, value);
lhm.putAll((Map)hm);
}
public void printAll1(){
System.out.println("键值对:" + lhm.values());
}
}public class No09 { /**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根 FullHashMap fhm = new FullHashMap();
fhm.put("Alan", "Hello");
fhm.put("john", "Hello1");
fhm.put("King", "Hello2");
fhm.put("Dom", "Hello3");
fhm.put("jack", "Hello4");
/*fhm.put1("Alan", "Hello");
fhm.put1("john", "Hello1");
fhm.put1("King", "Hello2");
fhm.put1("Dom", "Hello3");
fhm.put1("jack", "Hello4");*/
//System.out.println(fhm.get("Alan"));
fhm.printAll();
//fhm.put1();
fhm.printAll1();
}}
*
* 使用键值对填充HashMap。打印结果,证明是按散列码排序的。
* 取出键值对,按键排序,将结果置入LinkedHashMap。证明
* 后者维持元素插入的顺序。那位高手帮忙做做这题啊
fhm.put1(); // 把这个注释去掉后
fhm.printAll1();输出为
key = [jack, Alan, john, Dom, King]
value = [Hello4, Hello, Hello1, Hello3, Hello2]
键值对:{jack=Hello4, Alan=Hello, john=Hello1, Dom=Hello3, King=Hello2}
键值对:[Hello4, Hello, Hello1, Hello3, Hello2]
我看结果很正常啊!
* 取出键值对,按键排序,将结果置入LinkedHashMap。证明
* 后者维持元素插入的顺序。谁能把这题目做出来啊
"证明是按散列码排序的",应该迭代HashMap.keySet(),打印每个key的hashCode()"取出键值对,按键排序",应该将HashMap.keySet()的所有key放入array或List,然后用Arrays.sort或Collections.sort排序"将结果置入LinkedHashMap",上述排序后的列表List keys
for(int i=0; i<keys.size(); ++i)
linkedHashMap.put(keys.get(i), hashMap.get(keys.get(i)));
最后打印LinkedHashMap
上面提到的一些方法看jdk api帮助,然后都调通并且会用就可以了
package c11;
import java.util.*;
/*
* 第九题:
*
* 使用键值对填充HashMap。打印结果,证明是按散列码排序的。
* 取出键值对,按键排序,将结果置入LinkedHashMap。证明
* 后者维持元素插入的顺序。
*
* *//*
* 我还有个问题:
*
* 在我这个程序里 Collections.sort 的排序顺序是插入顺序,
* 我知道这个函数可以按照 Comparator 这个接口的 compare 函数
* 去排序的,(这个东西返回 -1 0 1 不过我还是不知道它怎样排序的,很模糊呀!)
* 现在我想更改一下排序顺序,请问应该在哪里实现接口?compare 函数内部是怎样实现?
* 这两点我很模糊,请高手指点一下。
*
* */class FullHashMap{
private HashMap hm = new HashMap();
private LinkedHashMap lhm = new LinkedHashMap();
public void put(Object key,Object value){
hm.put(key, value);
}
public String get(Object key){
return (String)hm.get(key);
}
public void printAll(){
//遍历hm.keySet(),打印每个key的散列码。
Iterator it = hm.keySet().iterator();
while(it.hasNext())
System.out.println("keyCode = " + it.next().hashCode());
//取出键值对,然后用Collections.sort排序。
it = hm.keySet().iterator();
List lst = new ArrayList();
while(it.hasNext())
lst.add(it.next());
Collections.sort(lst);
it = lst.iterator();
System.out.println("After collections sort...");
while(it.hasNext())
System.out.print(it.next() + " ");
System.out.println();
//将排序后的结果放进LinkedHashMap中输出。
for(int i = 0;i<lst.size();i++)
//lhm的key是排序后的结果,value是排序后key的值。
lhm.put(lst.get(i),hm.get(lst.get(i)));
it = lhm.keySet().iterator();
System.out.print("LinkedHashMap keySet : ");
while(it.hasNext())
System.out.print(it.next() + " ");
System.out.println();
System.out.print("LinkedHashMap Output : " + lhm);
System.out.println();
System.out.println();
System.out.println("没有排序前的输出…………………………");
System.out.println("key = " + hm.keySet());
System.out.println("value = " + hm.values());
System.out.println("键值对:" + hm);
}
}public class No09 { /**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根 FullHashMap fhm = new FullHashMap();
fhm.put("Alan", "Hello");
fhm.put("john", "Hello1");
fhm.put("King", "Hello2");
fhm.put("Dom", "Hello3");
fhm.put("jack", "Hello4");
//打印全部结果。
fhm.printAll();
}}
第一个证明散列码,我觉得你直接打印出来就可以看到的吧。
打印出来的顺序不是你PUT进去的顺序不就证明了啊。
第二个是说明放进去保持了原来的顺序。
直接把HashMap里的键值对放到LinkedHashMap里,然后直接打印出来
如果跟上一个(证明HashMap散列码排序的时候)打印的顺序一致,那表明保持了插入的顺序。
这样就足够了吧。
还有,Comparator 接口我用过,里面就是一个compare方法,返回你要比较的容器里任意两个值的差值就可以了。可以return o1-o2;(根据关系返回正数,负数和零)
然后Collection.sort(L,Comparator c)方法根据C的compare方法返回的值来排序,想一想就知道怎么回事了,只要你以前编写过排序的类。