Функция Collections.max возвращает хэш-коды (я думаю)
Я считаю, что моя функция Collections.max возвращает хэш-коды, но, честно говоря, я не совсем уверен, что происходит.
Я создаю список деревьев со случайным значением пригодности, внедряю компаратор, а затем пытаюсь найти наибольшее значение пригодности (код ниже).
public class Tree {
public double suitability = Math.random();
public int id;
public static int count = 1;
public Tree(double suitability, int id) {
this.id = count;
count++;
}
public double getSuit() {
return suitability;
}
public void setSuit(double suitability) {
this.suitability = suitability;
}
public void measureSuit() {
System.out.println("Tree number " + id + " has a suitability of " + suitability);
}
}
class SuitComp implements Comparator<Tree> {
@Override
public int compare(Tree o1, Tree o2) {
return Double.compare(o1.getSuit(), o2.getSuit());
}
}
public class EmeraldRunner {
public static void main(String[] args) {
ArrayList<Tree> trees = new ArrayList<Tree>();
Tree tree;
int treeCount = 10;
for (int i = 0; i < treeCount; i++) {
tree = new Tree(i, i);
trees.add(tree)
Tree maxTree = Collections.max(trees, new SuitComp());
System.out.println(maxTree);
tree.measureSuit();
}
}
}
Мой вывод выглядит так:
learnFromCave.Tree@60f32dde
Дерево № 1 имеет пригодность 0,6114866528786418
learnFromCave.Tree@60f32dde
Дерево № 2 имеет пригодность 0,28381422309266247
learnFromCave.Tree@3312b1dd
Дерево № 3 имеет пригодность 0,8441348268153896
learnFromCave.Tree@3312b1dd
Дерево № 4 имеет пригодность 0,6269071898386682
learnFromCave.Tree@3312b1dd
Дерево № 5 имеет пригодность 0,08717540188464434
learnFromCave.Tree@3312b1dd
Дерево № 6 имеет пригодность 0,3810530158434646
learnFromCave.Tree@3312b1dd
Дерево № 7 имеет пригодность 0,0938353693923476
learnFromCave.Tree@3312b1dd
Дерево № 8 имеет пригодность 0,3656868216321937
learnFromCave.Tree@105b3e5d
Дерево № 9 имеет пригодность 0,9717207037612301
learnFromCave.Tree@105b3e5d
Дерево № 10 имеет пригодность 0,44423960773823645
1 ответ
System.out.println(maxTree);
звонки toString()
на maxTree
, Поскольку вы не переопределили его, он вызывает метод Object, который просто выводит полное имя класса и некоторую дополнительную информацию.
Вам необходимо реализовать toString()
самостоятельно, чтобы получить более читаемый вывод.
public class Tree {
public double suitability = Math.random();
public int id;
public static int count = 1;
public Tree(double suitability, int id) {
this.id = count;
count++;
}
public double getSuit() {
return suitability;
}
public void setSuit(double suitability) {
this.suitability = suitability;
}
public void measureSuit() {
System.out.println("Tree number " + id + " has a suitability of " + suitability);
}
@Override
public String toString() {
return "I am the tree with id " + id;
}
}