Java数据结构_Collection类

 

 

 

 

                    双链表结构

 

 

 

 

 

LinkedList 可以完成队列结构 栈结构 (双向链表)

栈 对头结点进行add和remove
pop的底层就是 push是对双向链表的头结点removeFirst
push是对双向链表的尾结点addFirst

队列就是对头进行删除(
removeFirst)队尾进行入队(addLast)

 

 

 

 

 

 

 使用 ? extend 父类  这样除了父类类型的ArrayList可以传入 别的不能传入 比如狗这个ArrayList

 

 

 linkHashSet

 

 

TreeSet
TreeSet类需要实现Comparable<E>的compareTo方法并且重写指定规则

 

 重写compareTo方法,这里指定weight升序排列

 

如果有weight相等情况我们可以这样写

 

 排除了相等还是分了大小的情况

 

也可以使用集合自带的比较器对象指定规则:

 

 注意:如果规则中是按照double等带小数点类型的话 比较最好调用double.compare(double d1,double d2)方法比较,如果直接相减的话可能两个相差不大的值比如 4.5 - 4.3 = 0.2,结果取整数,得到了两个对象都是相等的,其实4.5比4.3是要大的,可以看double.compare方法中是写的比较完美的,考虑到了很多情况,这就是为什么要看Java源码的原因,写的很严谨!值得学习!

 

 

引发思考?为什么重写equals方法要重写hashcode方法?

比如:我们new了两个对象

People s1 = new Students("张三",16,"男",89.5);

People s2 = new Students("张三",16,"男",89.5);

两个对象的hash值肯定不一样,但是内容是完全一致的,这时候用hashset存储可能认为是相同的,这时候set的不可重复性无法保证

 

 只有重写了equals方法和hashcode方法才能保证,约定我们认为内容一样,及时他们的hash值不一样,也是一样的对象。

这两个方法底层都是调用底层对象的地址,所以两个必须一起重写,不然重写了一个,另一个还是按照地址对比,对象还是不一样,所以两个方法必须同时修改重写,才能一致。

 

 

 重写的hash方法只对传入对象的具体值进行hash计算,没有对对象的堆内存中进行hash。

 



posted @ 2022-10-18 14:43  Lee最好好好吃饭  阅读(23)  评论(0)    收藏  举报