Set集合
对于Set集合,里面是不能存储重复元素的,它的两个常用子类,一个是HashSet,一个是TreeSet,因为这两个都是不允许存储重复元素的。
所以在存入时,首先会判断两个对象的Hahcode是否相等,如果两个对象的Hashcode相等,那么会接着会用equals比较两个对象,如果两个equals返回true,则说明两个对象相等,如果返回为false,则说明是不同的对象,可以存入。
所以在这里总结一下就是在判断两个对象是否相等时:
hashcode的返回值相等的两个对象,equals是否相等?不一定
equals返回值相等的两个对象,hashcode是否相等?一定
1、HashSet
底层由HashMap实现,HashSet不允许存入重复元素,是无序存储。
对于其常见方法如下:
public class hashset {
public static void main(String[] args) {
Set<String> set=new HashSet<>();
set.add("for");
set.add("you");
set.add("and");
set.add("future");
System.out.println(set);//从这个也可以看出,HashSet是无序存储
set.add("for");
System.out.println(set);//从此处输出可以看出Set不能存储重复元素
System.out.println(set.isEmpty());
System.out.println(set.size());
System.out.println(set.contains("and"));
System.out.println(set.remove("future"));
System.out.println(set);
}
}
结果如下:
2、TreeSet
TreeSet基本操作和HashSet基本上差不多,也不能允许存储重复元素,底层是通过TreeMap实现的。TreeSet并不是根据插入元素的顺序来进行排序,而是根据它实际的大小进行排序。
其基本操作如下:
public class treeset {
public static void main(String[] args) {
Set<Character> set=new TreeSet<>();
set.add('g');
set.add('a');
set.add('d');
set.add('b');
set.add('f');
System.out.println(set);//从这里的输出可以看出来是升序排列的
set.add('a');
System.out.println(set);//从这里也可以看出来是不允许存储重复元素的
System.out.println(set.isEmpty());
System.out.println(set.size());
System.out.println(set.remove('b'));
System.out.println(set);
}
}
结果:
TreeSet的排序:
1、实现了Comparable接口,复写了compareTo方法,也称之为内部排序。
2、实现外部接口Comparator接口,然后覆写compare方法,也称之为外部排序。