Según el código fuente, la capa inferior de TreeSet usa TreeMap
package sxt.gaoqi.container;
import java.util.HashMap;
import java.util.Map;
public class JsHashSet
{
Map map;
private static final Object PRESENT = new Object();
public JsHashSet()
{
map = new HashMap();
}
public int size()
{
return map.size();
}
public void add(Object o)
{
map.put(o, map);
}
@Override
public String toString()
{
StringBuilder sb = new StringBuilder();
sb.append("[");
for(Object key : map.keySet())
{
sb.append(key + ",");
}
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}
public static void main(String[] args)
{
JsHashSet set = new JsHashSet();
set.add("a");
set.add("b");
set.add("c");
set.add("a");
System.out.println(set);
JsHashSet set2 = new JsHashSet();
set2.add(new Emp2(3, 5000));
set2.add(new Emp2(5, 6000));
set2.add(new Emp2(1, 8000));
set2.add(new Emp2(2, 3000));
System.out.println(set2);
}
}
class Emp2 implements Comparable<Emp2>
{
int id;
double salary;
public Emp2(int id, double salary)
{
this.id = id;
this.salary = salary;
}
@Override
public int compareTo(Emp2 o)
{
if(this.salary < o.salary)
{
return -1;
}
else if(this.salary > o.salary)
{
return 1;
}
else
{
if(this.id < o.id)
{
return 1;
}
else if(this.id > o.id)
{
return -1;
}
else
{
return 0;
}
}
}
@Override
public String toString()
{
return "id: " + id + "-salary: " + salary;
}
}