1,hashCode在1.7以及1.7之前是数组加链表,在1.8以后还外加了红黑树
2,当用TreeSet添加了多个数据,如果不重写compareTo方法,则会报错,重写compareTo方法需要在javabean对象的class添加一个接口,如下
public class Book implements Comparable<Book>{ private int price; private String name;
重写的规则:先比较书的价格,如果书的价格相同再比较名字是否相同,名字相同则不存入,代码如下,
public int compareTo(Book o) { int result = this.price - o.price; result = result == 0 ? this.name.compareTo(o.getName()) : result; return result; }
以上这种方法叫做自然排序
或者可以用比较器比较
TreeSet<Book> treeSet = new TreeSet<Book>(new Comparator<Book>() { @Override public int compare(Book o1, Book o2) { return o1.getPrice()-o2.getPrice(); } });
直接在方法里重写比较器
3,红黑规则
1.
每一个节点或是红色的,或者是黑色的。
2.
根节点必须是黑色
3.
如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为
Nil
,这些
Nil
视为叶节点,每个叶节点
(Nil)
是黑色的;
4.
如果某一个节点是红色,那么它的子节点必须是黑色
(
不能出现两个红色节点相连的情况
)
5.
对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点;