手工实现HashSet(简化版的HashMap)
package cn.com.collection;
import java.util.HashMap;
public class TestSet {
HashMap map;
private static final Object PRESENT = new Object();
public TestSet() {
map = new HashMap();
}
public int size() {
return map.size();
}
public void add(Object o) {
map.put(o,PRESENT);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (Object o:map.keySet()) {
sb.append(o+",");
}
sb.append("]");
return sb.toString();
}
public static void main(String[] args) {
TestSet t = new TestSet();
t.add(1);
t.add(2);
t.add(3);
System.out.println(t);
}
}
关于TreeSet:
TreeSet底层是用TreeMap实现的,通过key来存储Set的元素,TreeSet内部需要对存储的元素进行排序,需要实现Comparable接口(实现排序)
package cn.com.collection;
import java.util.Set;
import java.util.TreeSet;
public class TestTreeSet {
//测试TreeSet,TreeSet本质上其实是TreeMap实现,因为TreeMap
//实现了对key的排序,那么TreeSet默认就有实现排序
public static void main(String[] args) {
Set<Integer> s = new TreeSet<>();
s.add(1);
s.add(2);
s.add(3);
// for (Integer a : s) {
// System.out.println(a);
// }
//System.out.println(s);
Set<Empy> s2 = new TreeSet<>();
s2.add(new Empy(1000,"小明",5000));
s2.add(new Empy(2000,"小红",3500));
s2.add(new Empy(1500,"小军",4500));
s2.add(new Empy(150,"小琪",4500));
for (Empy e:s2) {
System.out.println(e);
}
}
}
class Empy implements Comparable<Empy> {
int id;
String name;
double salary;
public Empy(int id, String name, double salary) {
this.id = id;
this.name = name;
this.salary = salary;
}
@Override
public int compareTo(Empy o2) {
if (this.salary > o2.salary) {
return 1;
}else if(this.salary < o2.salary) {
return -1;
}else {
if (this.id > o2.id) {
return 1;
}else if(this.id < o2.id) {
return -1;
}else {
return 0;
}
}
}
@Override
public String toString() {
return "id:"+id+",name:"+name+",salary:"+salary;
}
}