集合和泛型
集合的API
分支主题 4
集合
List(interface)
-
ArrayList
- 无自动字母排序
- 没有sort()
- 优点:成本低,插入末尾或者指定位置
-
LinkdList
-
Vector
Set(interface)
-
HashSet
-
如何判断相等
-
依据hashCode()
-
没被覆盖时,依据内存位置计算
- 若两对象的hashcode相等,则再调用equals()来判断是否真的相等
- 若hashCode()没有重写过,则堆上的两个对象永远不可能相等
- 若equals()没有重写过,则堆上的两个对象永远不可能相等,因为不同的对象有不同的字节组合
-
被覆盖时,往往用于判断(数据上)相同的对象
- 例如对象中的字符、数值等
-
a.equals(b) 必须与a.hashCode() == b.hashCode()等值
- 但a.hashCode() == b.hashCode()不一定要与a.equals(b)等值
-
-
引用相等性
- 堆上同一对象的两个引用:使用==判别
-
对象相等性
- 堆上的两个不同对象在意义上(数据上)是相同的
-
-
缺点:无序
- 想要有序则使用TreeSet
-
-
TreeSet
-
防重复上与HashSet相同,且有序
-
同sort()一样自动字母排序
- = Collections.sort(List list)
-
其元素必须是Comparable
若不然TreeSet不知道如何排序
- 方法一实现Comparable:将对象Book implement Comparable{String title;…},…实现public int compareTo(Object b){Book book = (Book) b; return title.compareTo(book.title);}
- 方法二重载Comparator,用于创建该参数的TreeSet
-
缺点:成本高,插入时需要查找位置再插入
-
-
LinkedHashSet
Map(interface)(没有继承Collection)
Key-Value
- HashMap
- TreeMap
- LinkeHashMap
- Hashtable
泛型(generic)<>
主要目的是让你能够写出有类型安全性的集合
例如:ArrayList,此处的String就表明了ArrayList的内容只能是String,而不会是其他类型
类上使用泛型(class后),方法上使用泛型(void等返回类型前)
泛型观点:extend代表extend和implement
类型参数:E:与集合有关;T:否则
extends
-
extends
- 代表“是一个”
-
implements
other
Abstract 抽象
-
抽象类
- 1、不能被实例化
2、可通过继承抽象类来实现抽象类的子类的实例化
- 1、不能被实例化
-
抽象方法
- 1、抽象方法的类必定是抽象类
2、抽象方法只是声明,没有{}
3、构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
- 1、抽象方法的类必定是抽象类