TreeMap两种添加方式的使用
我们在TreeMap中添加数据其实我们可以通过TreeSet集合中添加数据的过程进行类比
-
因为我们的TreeSet集合底层其实就是创建了一个TreeMap集合,而我们使用TreeMap集合进行添加元素的时候是通过两种方式进行添加的
- 就是当我们使用无参构造方法创建TreeSet集合的时候我们默认是通过参数对象中重写的Comparable接口中的compareTo()方法的返回值来判断是否重合的
- 如果compareTo()方法返回值为0,就表示重复了,如果是其他值就表示添加成功
- 当我们使用参数为Comparator接口实现类对象的有参构造方法创建TreeSet集合时,我们就通过这个传入进来的实参对象中的compare()方法进行比较,如果这个compare()方法的返回值为0,就表示重复,如果返回值为其他就表示没有重复(也就是添加成功)
而又因为我们在TreeSet中添加数据其实就是添加到了底层的TreeMap中的key中去了,也就是我们通过TreeMap中的key进行判断重复不重复的
同理我们使用TreeMap中添加对象其实也是和上面一样的,也是通过两种方式添加:
- 使用无参构造方法
- 这个时候我们就要TreeMap集合中的key中的元素都实现Comparable接口
- 也就是我们在TreeMap集合中添加元素是否重复是通过集合中的key来决定的,和value无关
- 这个其实也是因为我们的TreeMap中的key是不可重复的,而TreeMap中的value是可重复的,这个时候我们又知道在TreeMap的底层是通过红黑树进行存储的
- 而我们的红黑树中是不可以存储重复数据的,而我们的value是可重复的,这个时候如果我们使用value作为排序的对象,这个时候可能两个对象的value一样但是key不一样,这个时候我们使用value进行判断这两个元素就是重复了,但是实际这两个对象其实并没有重复
- 这个其实也是因为我们的TreeMap中的key是不可重复的,而TreeMap中的value是可重复的,这个时候我们又知道在TreeMap的底层是通过红黑树进行存储的
- 这个时候是使用的TreeMap集合中的key中的元素所在类中的实现的Comparable接口中的compareTo()方法来判断的添加是否重复
- 使用Comparable接口中的compareTo()方法进行排序我们又称之为自然排序
- 使用Comparator接口实现类对象作为参数的有参构造方法来创建TreeMap对象
- 这个时候我们就会使用这个参数对象,也就是我们的Comparator接口对象,使用这个对象所在类重写的compare()方法进行判断是否重复,然后添加
- 使用Comparator中的compare()方法进行排序我们又称之为定制排序
补充:
-
TreeMap中添加元素时判断元素是否重复是通java比较器来实现的,也就是通过排序来判断是否重复
-
TreeMap中是根据key进行排序的
- 因为我们的key是和TreeMap集合的存储特征保持一致的,都是无序的,不可重复的,这个时候我们就可以通过key进行排序
- 不能通过value进行排序,因为value的存储特征和TreeMap并不相同
- 因为我们的key是和TreeMap集合的存储特征保持一致的,都是无序的,不可重复的,这个时候我们就可以通过key进行排序