卢雨杰10.09
学习内容:
collections类
collections类是java提供的一个集合操作工具类,它包含了大量的静态方法,用于实现集合对元素的排序,查找和替换等操作
collection和collections的区别:
前者是集合的操作类,后者是集合接口
compare:类的自然排序
compareTo:自然比较方法
compareTo:的语法:
int compareTo(Object obj);
参数obj即要比较的对象,
返回值:负整数,零或正整数;根据此对象是小于等于还是大于指定对象返回不同的值
例子
String s1 = "abc";
String s2 = "abcd";
String s3 = "abcdfg";
String s4 = "1bcdfg";
String s5 = "cdfg";
System.out.println( s1.compareTo(s2) ); // -1 (前面相等,s1字符串长度小1)
System.out.println( s1.compareTo(s3) ); // -3 (前面相等,s1字符串长度小3)
System.out.println( s1.compareTo(s4) ); // 48 ("a"的ASCII码是97,"1"的的ASCII码是49,所以返回48)
System.out.println( s1.compareTo(s5) ); // -2 ("a"的ASCII码是97,"c"的ASCII码是99,所以返回-2)
Compareator接口实现比较器排序
使用compareator接口需要重写int compare()方法
语法:
int compare(Object obj1,Object obj2);
参数obj1 是要比较的第一个对象
参数obj2 是要比较的第二个对象
返回值:负整数,零或正整数;根据此对象是小于等于还是大于指定对象返回不同的值
泛型(参数化类型)
泛型是jdk1.5的新特性
泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
语法格式:
类型对象 = new 类型
<>是泛型的特性
E表示某种数据类型,也可以用其他字母表示,如T,在实际使用泛型时,需要使用明确的类型替换掉E
上限:?extends E:可以接收E类型或者E的子类型对象。
下限:?super E:可以接收E类型或者E的父类型对象。
上限什么时候用:往集合中添加元素时,既可以添加E类型对象,又可以添加E的子类型对象。为什么?因为取的时候,E类型既可以接收E类对象,又可以接收E的子类型对象。
下限什么时候用:当从集合中获取元素进行操作的时候,可以用当前元素的类型接收,也可以用当前元素的父类型接收
*泛型的细节:*
1)、泛型到底代表什么类型取决于调用者传入的类型,如果没传,默认是Object类型;
2)、使用带泛型的类创建对象时,等式两边指定的泛型必须一致;
原因:编译器检查对象调用方法时只看变量,然而程序运行期间调用方法时就要考虑对象具体类型了;
3)、等式两边可以在任意一边使用泛型,在另一边不使用(考虑向后兼容);
学习心得:
在看源码时速度可以稍微慢一点,理解代码需要亿点点时间
近期评论