16.数据结构
集合与泛型
排序在Java中只是雕虫小技
ArrayList不是唯一的集合
- TreeSet 已有序状态保持并可防止重复
- HaspMap 可成对的name/value来保存与取出
- LinkedList 针对经常插入或删除中间元素所设计的高效率集合
- HashSet 防止重复的集合,可以快速地找寻相符的元素
- LinkedHashMap 类似HashMap,但可记住元素插入的顺序,也可以设定依照元素上次存取的先后来排序
泛型意味着更好的类型安全
关于泛型
- 创建被泛型化类
- new ArrayList
();
- new ArrayList
- 声明与指定泛型类型的变量
- List
songList = new ArrayList ();
- List
- 声明(与调用)取用泛型类型的方法
- void foo(List
) - x.foo(songList)
- void foo(List
使用泛型的类
- 类的声明
- 新增元素方法的声明
任何类型指代
指明是元素
运用泛型的方法
- 使用定义在类声明的类型参数
- public class ArrayList
Extends AbstractList - public boolean add(E o)
- public class ArrayList
- 使用未定义在类声明的类型参数
- public
void takeThing(ArrayList list )
- public
集合
- LIST 对付顺序的好帮手
- SET 独一无二的性质
- MAP 用key来搜索的专家
对象要怎样才算相等
- 引用相等
- 引用不相等,hashCode()和equals()相等
hashCode()与euqals()的相关规定
- 如果两个对象相等,则hashcode必须相等
- 如果两个对象相等,对其中一个对象调用equals必须返回true
- 如果两个对象有相同的hashcode,他们也不一定相等.但如果两个对象相等,则hashcode也必须相等
- 因此若equals被覆盖过,则hashCode也必须被覆盖
- hashCode的默认行为是堆在heap上的对象产生的独特值.如果你没有override过hashcode,则class的两个对象怎样都不会被认为是相同的
- equals的默认行为是执行==比较,也就是说回去测试两个引用是否对上heap上同一个对象.如果equals没有被覆盖过,两个对象永远都不会被视为是相同的,因为不同的对象有不同的字节组合
数组的类型是在运行期间检查的,但集合的类型检查只会发生在编译期间
万用字符
public void takeAnimal(ArrayList<? extends Animal> animals){}
注意:
在方法参数使用万用字符时,编译器会阻止任何可能被破坏引用参数所指集合的行为.你能够调用list中任何元素的方法,但不能加入元素.也就是说,你可以操作集合元素,但不能新增集合元素.如此才能保障执行期间的安全性,因为编译器会阻止执行期的恐怖行动
所以遍历可以,add不行
相同功能的另一种语法
- public
void takeThing(ArrayList list) - public void takeThing(ArrayList<? extends Animal> list)
- 区别
- 多个参数的时候的写法
- (ArrayList
one,ArrayList two) - (ArrayList<? extends Animal>one,ArrayList<? extends Animal> two)
- (ArrayList
- 多个参数的时候的写法
- 本文链接: https://halo.cjh.kim/archives/headfirstjava16md
- 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!