1.
2.set 与 list的区别
set:没有顺序且不可以重复
list:有顺序且可以重复
重复是指两个对象互相equals
3.Collection中所定义的方法 int size() 返回大小 boolean isEmpty() 是否为空 boolean contains(Object obj) 是否包含某个对象 boolean add( Object obj) 只能添加对象或者 "string" ,不能add(12122) boolean remove(Object obj) 删除 boolean containsAll(Collection c ) 是否包含另个集合的所有元素 boolean addAll(Collection c ) boolean removeAll(Collection c ) boolean ratainAll(Collection c ) 求两个集合的交集 Object[] toArray() 转换成一个对象数组
4.List list = new ArrayList();为什么这样写?
ArrayList list = new ArrayList()时,程序可能调用ArrayList特有的方法,当要更改数据类型时,改成LinkedeList list = new LinkedList(); 那么程序中那些ArrayList的
特有方法不能用了,需要同时更改大量代码
List list = new ArrayList(),此时的list只能访问List中定义的方法,当更改List list= new LinkedList(),程序中用到的方法两种数据类型都可以访问,不需要更改,不会造成修改大量代码的后果
5.容器类对象在调用remove,contains等方法时需要比较对象是否相等,这会涉及到对象类型的equals()与hashcode()方法,对于自定义的类,需要重写这两个方法以实现自定义的对象相等规则,两个对象互相equals必须具有相同的hashcode,hashcode相当于目录索引,指向内存中的某个值
6.Iterator 因为在Iterrator循环的内部,collection被锁定了
7.Collections
8.Comparable 从Collections.sort()衍生一个问题,普通的数据类型可以比较大小,要是自定义的类怎么比较大小?这是就需要定义一个方法来规定类之间大小的比较规则,继承comparable接口,重写CompareTo方法确定该类的排序方式
9.自动打包,解包 在合适的时机自动将基础数据类型转换成对象称为自动打包 反之自动解包 原来:map.put("1",new Interger(1)); 现在:map.put("1",1); 注意collection只能添加对象
10.泛型 在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患,强制类型转换很麻烦,我还要事先知道各个Object具体类型是什么,才能做出正确转换。否则,要是转换的类型不对,比如将“Hello Generics!”字符串强制转换为Double,那么编译的时候不会报错,可是运行的时候就挂了 泛型的好处是在编译的时候检查类型安全,增强程序的可读性,不需要强制类型转换,配合自动打包,解包,给程序带来极大便利 泛型使用:(1)--map<String> m = new HashMap<String>();在定义collection的时候指定 (2) Iterator<String> it = m.Iterator();循环时用Iterator指定,建议两个地方都指定,增加程序可读性,别人一看就知道这个集合中存储的是什么类型的数据 总结泛型的好处:把运行时可能产生的错误,提前到编译期发生,有利于代码的调试
|