java 学习之路-----容器
容器:
- 1. 容器API结构图(*)
- 2. 数组也是一种容器,但是他们是有区别的,数组与本章容器的区别
1) 在使用过程中,数组一旦确定长度,那么这个数组就会变成一个长度不可变的容器,
假如后期需要为数组扩充容量,只能重新创建一个新的数组。
2) 容器提供了一系列方法使得容器可以根据需要扩充长度或减少长度。
- 3. Collection :定义存储一组对象的方法,Set、List定义其存储方式
Set中的数据对象没有顺序且不可以重复
List中的数据对象有顺序且可以重复
(不能放置基本数据类型的对象,思考一下原因?)
原理:java.lang.Object.equals()、 java.lang.Object.hashCode() - 索引
Map :定义存储一对对象的方法(key - value 对)
- 4. 问题:Collection c = new ArrayList(); 与 ArrayList c = new ArrayList();的区别:
父类引用指向子类对象,只能使用父类中定义的方法。
(*)这是java的标准
三流的公司卖产品,二流的公司卖服务,一流的公司卖标准
- 5. 深层次剖析 PrintStream类的println(Object obj)方法:
Println默认调用对象的toString()方法,如果该对象的类中没有重写Object类的toString()
方法,则调用其父类的toString()方法
- 6. equals 与 hashCode方法
容器类对象在调用remove、contains等方法时需要比较对象是否相等,这会涉及到对象类型的equals方法和hashCode方法,对于自定义的类型,需要重写equals方法和hashCode方法以实现自定义的对象相等规则
相等的对象应该具有相等的hashCode
当一个对象当做索引的时候会用到hashCode(),使用hashCode效率比较高
两个对象equals, 那么他们的hashCode一定相等
详见:java03/day18/TestCollection.java
- 7. Iterator 接口 (统一遍历集合类)(*)
所有实现了Collection接口的容器类都有一个iterator()方法,该方法返回一个实现Iterator接口的对象。
Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。
Iterator 在循环遍历时会将容器锁定,无法使用对象本身的remove方法
Iterator 接口提供以下方法:
- boolean hasNext() //判断游标右边是否有元素
- Object next() // 返回游标右侧的元素并将游标移动到下一个位置
- void remove() //删除游标左边的元素,执行完next之后该操作只能执行一次
- 8. 增强版for循环
方便的遍历容器中的元素。
缺点: 数组: 不能方便的使用下标
集合: 不能方便的删除元素
原因:内部使用iterator
(*) 除简单遍历读取外,不建议使用增强for
- 9. Set接口 :Set是Collection接口的子接口, Set中的元素无顺序、不可重复。
常用实现类 hashSet
- 10. List接口: List是Collection接口的子接口,List中的元素有顺序、可重复。
常用实现类 ArrayList(底层数组)、LinkedList(底层链表)
- 11. Set与List接口区别、测试retainAll() 和 addAll()方法
- 12. java.util.Collections类
提供一些静态方法实现基于List容器的一些常用算法
Void Sort(List l) 对List容器进行排序 ,unicode码从小到大排序,小在前
Void shuffle(List l) 对List容器内的对象进行随机排序
Void reverse(list l) 逆序排序
Fill(List l,Object o) 用一个特定对象重写整个List容器
Void copy(list list1 ,list list2) 将list2拷贝到list1
Int binarySearch(list l , Object o) 对于顺序list按照折半查找法查找对象
- 13. java.lang.Comparable 接口 实现排序接口
若想自定义某个类在集合中的排序方式,可实现该接口并重写comparaTo()方法
排序方法只能用在实现了Comparable接口的类。
- 14. Map
- 15. 泛型