JavaHashSetとTreeSetの比較



Java Hashset Treeset Comparison



HashSet :最下層はHashMapを使用し、要素はハッシュコードとequalsメソッドを実装する必要があります
HashSetによって追加された要素は順序付けられていません。これは、データが書き換えられたハッシュコードメソッドに従ってハッシュの形式で格納され、すべてのデータが順序どおりに繰り返されないためです。

TreeSet :TreeMapは最下位レベルで使用され、要素はComparableインターフェイスのcompareToメソッドを実装する必要があります。
下部に赤黒木を維持します。私はそれを二分探索木として単純に理解しています。新しい要素を追加するときは、ツリーに新しいリーフノードを追加し、compareToメソッドを使用して、ノードが左側にあるか右側にあるかを判断します。compareToは、AがBよりも優れていることを意味します。compareToが-1を返す場合、これは追加ノードよりも小さいため、新しいノードは右側にあります。 1を返す場合は、これが追加ノードよりも大きいことを意味し、新しいノードを左側に配置する必要があります。
中間次数が二分探索木を通過した後、順序付けられたシーケンスを取得できます。



public class test3HashSet { public static void main(String[] args) { HashSet<Circle> hashSet = new HashSet<>() TreeSet<Circle> treeSet = new TreeSet<>() for (int i = 1 i < 10 i++){ hashSet.add(new Circle(i)) treeSet.add(new Circle(i)) } System.out.println('HashSet:') for (Circle circle : hashSet){ System.out.println(circle) } System.out.println('TreeSet:') for (Circle circle : treeSet){ System.out.println(circle) } } }

サークルクラス:

import java.util.Objects public class Circle extends Shape implements zqExperiment5.Shape, Comparable{ private double radius public double getRadius() { return radius } public void setRadius(double radius) { this.radius = radius } public Circle(){ this(1.0) } public Circle(double radius){ setRadius(radius) } @Override public double getArea() { return Math.PI * Math.pow(getRadius(),2) } @Override public void getDescribe() { System.out.println(String.format('Circle radius: %f, area: %f', getRadius(), getArea())) } @Override public String toString() { return 'Circle{' + ' radius = ' + radius + ' area = ' + getArea() + '}' }

出力結果:



HashSet: Circle radius: 6.000000, area: 113.097336 Circle radius: 7.000000, area: 153.938040 Circle radius: 1.000000, area: 3.141593 Circle radius: 3.000000, area: 28.274334 Circle radius: 9.000000, area: 254.469005 Circle radius: 5.000000, area: 78.539816 Circle radius: 2.000000, area: 12.566371 Circle radius: 8.000000, area: 201.061930 Circle radius: 4.000000, area: 50.265482 TreeSet: Circle radius: 1.000000, area: 3.141593 Circle radius: 2.000000, area: 12.566371 Circle radius: 3.000000, area: 28.274334 Circle radius: 4.000000, area: 50.265482 Circle radius: 5.000000, area: 78.539816 Circle radius: 6.000000, area: 113.097336 Circle radius: 7.000000, area: 153.938040 Circle radius: 8.000000, area: 201.061930 Circle radius: 9.000000, area: 254.469005