객체를 Treeset에 추가하려고하지만 객체가 모두 추가되지는 않습니다.Java TreeSet이 객체를 추가하지 않습니다.
class Fruits
{
String name ;
int weight;
int price;
Fruits(String n, int w, int p)
{
this.name=n;
this.weight=w;
this.price =p;
}
@Override
public int hashCode() {
System.out.println("hashcode called");
int prime =31;
int result =1;
result = prime*result +(this.name.hashCode()+this.price+this.weight);
return result;
}
@Override
public boolean equals(Object obj) {
System.out.println("Equals called");
if(null!=obj)
{
Fruits f= (Fruits) obj;
if(this.name.equals(f.name) && this.price==f.price && this.weight == f.price)
{
return true;
}
}
return false;
}
}
class FruitsComparator implements Comparator<Fruits>
{
//Order by Name, then quanity and then Price
@Override
public int compare(Fruits f1, Fruits f2)
{
if(f1.name.equals(f2.name) && f1.weight == f2.weight && f1.price == f2.price)
{
System.out.println(1);
return 0;
}
else if(f1.name.equals(f2.name) && f1.weight==f2.weight && f1.price < f2.price)
{
System.out.println(2);
return -1;
}
else if (f1.name.equals(f2.name) && f1.weight==f2.weight && f1.price > f2.price)
{
System.out.println(3);
return 1;
}
else if (f1.name.equals(f2.name) && f1.weight<f2.weight && f1.price == f2.price)
{
System.out.println(4);
return -1;
}
else if (f1.name.equals(f2.name) && f1.weight>f2.weight && f1.price == f2.price)
{
System.out.println(5);
return 1;
}
else if (f1.name.compareTo(f2.name) <1 && f1.weight==f2.weight && f1.price == f2.price)
{
System.out.println(6);
return -1;
}
else if (f1.name.compareTo(f2.name) >1 && f1.weight==f2.weight && f1.price == f2.price)
{
System.out.println(7);
return 1;
}
return 0;
}
}
다른 클래스의 public static void main.
Fruits f1= new Fruits("Apple",1,3);
Fruits f2= new Fruits("Apple",10,1);
Fruits f3= new Fruits("Apple",15,2);
Set<Fruits> sf = new TreeSet<Fruits>(new FruitsComparator());
sf.add(f1);
sf.add(f2);
sf.add(f3);
System.out.println("--Fruits Example--");
for(Fruits f: sf)
{
System.out.println(f.name+"-"+f.weight+"-"+f.price);
}
내가 얻을 출력은 다음과 같습니다
--Fruits Example--
Apple-1-3
을하지만 난이 모든 개체 그냥 동일하지만 세 번째 요소 모두를 유지 얻을 아래와 같이 나는 과일 OBJS이있을 때. 과일 f1 = 새로운 과일 ("Apple", 1,3); 과일 f2 = 새로운 과일 ("Apple", 1,1); 과일 f3 = 새로운 과일 ("Apple", 1,2);
이의 출력 GET 내가 무게와 가격에 다른 요소를 유지 그래서 어떻게 든 내 개체가 동일하게 취급됩니다
--Fruits Example--
Apple-1-1
Apple-1-2
Apple-1-3
입니다. 나는 왜 물체들이 같은 것으로 취급되는지를 알 수 없었다. 도와주세요.
if(this.name.equals(f.name) && this.price==f.price && this.weight == f.price)
이 있었어야 :
if(this.name.equals(f.name) && this.price==f.price && this.weight == f.weight)
이 (마지막 부분에주의)
복사 - 붙여 넣기 오류 ('f.price'는'f.weight' 여야 함)로 닫는 투표. – dasblinkenlight
비교기 구현은 읽을 수 없도록 혼란 스럽습니다. 또한, .compareTo 결과는 1이 아닌 0과 비교되어야합니다. –