集合第三天
Set集合特点:
1.无序,第一次存取顺序不一致
2.不重复 可以除去重复
3.无索引 不能使用普通for循环遍历
HashSet :无序 不重复 无索引
LinkedHashSet:有序 不重复 无索引
TreeSet : 排序 不重复 无索引
二叉树结构 不安全
会对存入的元素进行排序
1.comparable 自然顺序 编码表顺序
2.comparator 自定义排序 定制排序
知识点(创建类 implement Serializable )
public int compareTo(Student o) {
//按照名字升序来排
//如果主要的元素 相同的话,再进行次要元素的比较
int num = name.compareTo(o.name);
if (num != 0){
return num ;
}
return age.compareTo(o.age);
}
如果想要降序的话 前面加 - 号 就行
自然顺序
public int compareTo (Student a)
重写Comoarable ,不可以 return 0;
名字升序 return name.compareTo(a.name);
自定义排序 implements Comparable<Student>
1.编写比较器类实现定制排序接口
2.创建比较器的对象
3.将该比较器的对象给的TreeSet 的构造器
另附 测试单元
测试单元:
@Test (选择4)
public void m1()[
sout
]
Src目录
Test目录 Mark Dir Test
另附 泛型的简单应用
Dao<T> 类的自定义泛型 类操作的对象类型不确定的时候使用,
函数的泛型 需要在返回值类型的前面声明,
静态函数可以声明泛型,静态函数不能访问类上面定义的泛型
T type 类型
E element 元素
K key 键
V value 值
Map 中存储的就是 键值对
R returnType
1、 泛型(Generic)格式: 通过<>来定义要操作的引用数据类型。
优点:1. 运行时异常转换为编译时错误;
2. 避免强制类型转换。
什么时候用泛型?
通常集合框架中很常见,只要见到<>就要定义泛型
其实<>就是用来接收类型的。用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
例:字符串排序
2、
什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候定义泛型类;
早期定义Object来完成扩展。
现在定义泛型来完成扩展。
例: Worker、Student
3、自定义泛型
泛型类定义的泛型,在整个类中有效,
如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定。
为了让不同方法可以操作不同类型,而且类型还不确定,那么可以将泛型定义在方法上。
位置: void前面;
4.
如果静态方法要操作的数据类型不确定,可以将泛型定义在方法上;
位置: static之后、void之前
5.
接口的泛型:
6. 泛型的高级应用
打印任意类型的集合
通配符 ? :也叫占位符;
泛型的限定:
? extends E : 可以接受E类型或者E的子类型。 泛型上限:上面(父类)限定;
? super E : 可以接受E类型或者E的父类型。泛型下限:下面(子类)限定。
缺点: 不能使用类型的具体属性
?与<T>的区别:能否类型装换
可变参数
格式:int...nums
注意 一个形参列表中只有一个可变参数,可变参数必须放在形参列表的最后面
集合工具类 Collections Collections不是集合 是工具
Collections 常用API
1.Collections.addAll(类名,"楚留香","楚留香","陆小凤","金毛狮王");
浙公网安备 33010602011771号