请指教下,刚开始看java

Crystal辰 2013-06-27 01:00:28
我昨天看了个Map集合的例子,然后自己写了下,但是怎么遍历的时候只有输出3个,put方法然道没put进去?代码如下

import java.util.*;
public class PropTest{
public static void main(String[] args){
Product p1 = new Product("西瓜",1.0);
Product p2 = new Product("桃子",6.0);
Product p3 = new Product("苹果",4.0);
Product p4 = new Product("草莓",2.0);
Product p5 = new Product("樱桃",12.0);

SortedMap pr = new TreeMap();
pr.put(p1,"10kg");
pr.put(p2,"20kg");
pr.put(p3,"11kg");
pr.put(p4,"13kg");
pr.put(p5,"14kg");

System.out.println(pr.size());
Set s = pr.keySet();
Iterator it = s.iterator();

while(it.hasNext()){
Object o1 = it.next();
Object v = pr.get(o1);
System.out.println("key:"+o1+",value:"+v);
}
}
}

class Product implements Comparable{
String name;
double price;
Product(String name,double price){
this.name = name;
this.price = price;
}
public String toString(){
return "[name:"+name+" price:"+price+"]";
}
public int compareTo(Object o){
Product o1 = (Product)o;
double price1 = this.price;
double price2 = o1.price;
if(price1>price2){
return 1;
}else if(price1>price2){
return -1;
}else return 0;
}
}
...全文
207 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
地下室森林 2013-06-27
  • 打赏
  • 举报
回复
首先看api:
基于红黑树(Red-Black tree)的 NavigableMap 实现。
该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的
 Comparator 进行排序,具体取决于使用的构造方法。
1. 你题目要想显示5的话改下价钱就行,你把价钱改成都大于前面那个数的话。 2. 但是真正的地方还是你的comparable里面的compareto方法设定的出错。直接如下:

return (int) (o1.price - o2.price);
这样的话如果两个product价格一样的话只会显示一个。因为返回 0 。
dracularking 2013-06-27
  • 打赏
  • 举报
回复
TreeMap不是用equals来判断key是否相同,而是用compareTo,这样一来,不大于的都变成等于了,执行了替换
Crystal辰 2013-06-27
  • 打赏
  • 举报
回复
引用 1 楼 kiritor 的回复:
[quote=引用 楼主 lizhipeng777 的回复:] 我昨天看了个Map集合的例子,然后自己写了下,但是怎么遍历的时候只有输出3个,put方法然道没put进去?代码如下

import java.util.*;
public class PropTest{
	public static void main(String[] args){
		Product p1 = new Product("西瓜",1.0);
		Product p2 = new Product("桃子",6.0);
		Product p3 = new Product("苹果",4.0);
		Product p4 = new Product("草莓",2.0);
		Product p5 = new Product("樱桃",12.0);
		
		SortedMap pr = new TreeMap();
		pr.put(p1,"10kg");
		pr.put(p2,"20kg");
		pr.put(p3,"11kg");
		pr.put(p4,"13kg");
		pr.put(p5,"14kg");

		System.out.println(pr.size());
	         Set s = pr.keySet();
		Iterator it = s.iterator();
		 
		while(it.hasNext()){
			Object o1 = it.next();
			Object v = pr.get(o1);
			System.out.println("key:"+o1+",value:"+v);
			}
		}
	}
	
class Product implements Comparable{
	String name;
	double price;
	Product(String name,double price){
		this.name = name;
		this.price = price;
		}
	public String toString(){
		return "[name:"+name+"  price:"+price+"]";
		}
	public int compareTo(Object o){
			Product o1 = (Product)o;
		double price1 = this.price;
		double price2 = o1.price;
		if(price1>price2){
			return 1;
		}else if(price1>price2){
			return -1;
			}else return 0;
		}
	}
楼主要仔细了,class Product implements Comparable 实现的compareTo方法逻辑问题!
else if(price1>price2){
			return -1;
			}else return 0;
		}
改成price1<price2[/quote] 好吧,我承认我粗心了,没去仔细检查,多谢!
TheNowWjj 2013-06-27
  • 打赏
  • 举报
回复
帅哥,compareTo 方法 else if 条件错了。应该是小宇。
StevenLoveMaggie 2013-06-27
  • 打赏
  • 举报
回复
引用 1 楼 kiritor 的回复:
[quote=引用 楼主 lizhipeng777 的回复:] 我昨天看了个Map集合的例子,然后自己写了下,但是怎么遍历的时候只有输出3个,put方法然道没put进去?代码如下

import java.util.*;
public class PropTest{
	public static void main(String[] args){
		Product p1 = new Product("西瓜",1.0);
		Product p2 = new Product("桃子",6.0);
		Product p3 = new Product("苹果",4.0);
		Product p4 = new Product("草莓",2.0);
		Product p5 = new Product("樱桃",12.0);
		
		SortedMap pr = new TreeMap();
		pr.put(p1,"10kg");
		pr.put(p2,"20kg");
		pr.put(p3,"11kg");
		pr.put(p4,"13kg");
		pr.put(p5,"14kg");

		System.out.println(pr.size());
	         Set s = pr.keySet();
		Iterator it = s.iterator();
		 
		while(it.hasNext()){
			Object o1 = it.next();
			Object v = pr.get(o1);
			System.out.println("key:"+o1+",value:"+v);
			}
		}
	}
	
class Product implements Comparable{
	String name;
	double price;
	Product(String name,double price){
		this.name = name;
		this.price = price;
		}
	public String toString(){
		return "[name:"+name+"  price:"+price+"]";
		}
	public int compareTo(Object o){
			Product o1 = (Product)o;
		double price1 = this.price;
		double price2 = o1.price;
		if(price1>price2){
			return 1;
		}else if(price1>price2){
			return -1;
			}else return 0;
		}
	}
楼主要仔细了,class Product implements Comparable 实现的compareTo方法逻辑问题!
else if(price1>price2){
			return -1;
			}else return 0;
		}
改成price1<price2[/quote] 同意楼上,楼主要注意啦!
菖蒲老先生 2013-06-27
  • 打赏
  • 举报
回复
要细心啊。。。。 } else if (price1 < price2) {
LCore 2013-06-27
  • 打赏
  • 举报
回复
引用 楼主 lizhipeng777 的回复:
我昨天看了个Map集合的例子,然后自己写了下,但是怎么遍历的时候只有输出3个,put方法然道没put进去?代码如下

import java.util.*;
public class PropTest{
	public static void main(String[] args){
		Product p1 = new Product("西瓜",1.0);
		Product p2 = new Product("桃子",6.0);
		Product p3 = new Product("苹果",4.0);
		Product p4 = new Product("草莓",2.0);
		Product p5 = new Product("樱桃",12.0);
		
		SortedMap pr = new TreeMap();
		pr.put(p1,"10kg");
		pr.put(p2,"20kg");
		pr.put(p3,"11kg");
		pr.put(p4,"13kg");
		pr.put(p5,"14kg");

		System.out.println(pr.size());
	         Set s = pr.keySet();
		Iterator it = s.iterator();
		 
		while(it.hasNext()){
			Object o1 = it.next();
			Object v = pr.get(o1);
			System.out.println("key:"+o1+",value:"+v);
			}
		}
	}
	
class Product implements Comparable{
	String name;
	double price;
	Product(String name,double price){
		this.name = name;
		this.price = price;
		}
	public String toString(){
		return "[name:"+name+"  price:"+price+"]";
		}
	public int compareTo(Object o){
			Product o1 = (Product)o;
		double price1 = this.price;
		double price2 = o1.price;
		if(price1>price2){
			return 1;
		}else if(price1>price2){
			return -1;
			}else return 0;
		}
	}
楼主要仔细了,class Product implements Comparable 实现的compareTo方法逻辑问题!
else if(price1>price2){
			return -1;
			}else return 0;
		}
改成price1<price2

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧