Java笔记——泛型的定义与使用

1.泛型定义
通过<数据类型>接收一种数据类型,在编译的时候会使用这种类型检测集合中的元素,如果不是<>中规定的类型,就不允许添加到集合当中(编译不通过)。
2.泛型作用
a、使用了泛型不再需要强制类型转换,容错处理,向下转型-----简化代码
b、将运行阶段的问题提前到了编译阶段检查,提高了代码的安全性和编程的效
3.类上的使用
public class Demo3 {
public static void main(String[] args) {
Student student = new Student();
Computer computer = new Computer(“苹果”);
Phone phone = new Phone(“苹果”);
//将工具交给学生
student.setObj(computer);//多态
//使用泛型后
//这里通过使用泛型:保证了Student1类的使用灵活性而且可以简化代码,提高代码的效率
Student1 student1 = new Student1<>();
student1.setObj(computer);
Computer computer3 = student1.getObj();
}
}
//使用泛型后
/*
E代表任意一种数据类型,但是<>中不一定是E,可以是任意字符.
在类的后面加<>就是在给类使用泛型.
在类上确定的泛型可以在成员上直接使用
*/
class Student1{
private E obj;

public E getObj() {
return obj;
}

public void setObj(E obj) {
this.obj = obj;
}
}

class Tool{
String name;
public Tool() {
}
public Tool(String name) {
this.name = name;
}
}

class Phone extends Tool{
public Phone(String name) {
super(name);
}
}

class Computer extends Tool{
public Computer(String name) {
super(name);
}
}
4.方法上的使用
public class Demo4 {
public static void main(String[] args) {
Teacher teacher = new Teacher<>();
//1.方法上的泛型与类上的泛型一致
teacher.play(“haha”);
//2.方法上独立使用泛型
teacher.show(2);
//3.静态方法上使用泛型
Teacher.run(5);
}
}

class Teacher{
//1.方法上的泛型与类上的泛型一致
public E play(E e){
return e;
}
//2.方法上独立使用泛型
/*
* 注意:泛型在使用之前一定要先进行声明
* 声明的方式:在方法的最前面加<符号>
* 作用:让方法内与方法的泛型保持一致
/
public void show(F f){
ArrayList list = null;
}
//3.静态方法上使用泛型
/

* 静态方法上无法使用类上的泛型,类上的泛型必须通过创建对象才能使用.
* 静态方法的调用不需要对象,所以静态方法如果想使用泛型,必须自己单独使用.
*/
public static void run(W w){

}

}

5.接口上的使用
public class Demo5 {
public static void main(String[] args) {
Dog dog = new Dog();
dog.play(“haha”);
Cat cat = new Cat<>();
}
}

//接口上使用泛型
interface Inter{
public void play(E e);
}

//子类使用泛型的情况
/*
*第一种:接口有泛型,子类没有遵守对应的泛型
*注意:必须给接口指定一个具体的泛型类型
/
class Dog implements Inter{
//重写的方法的泛型与接口一致
public void play(String e) {
// TODO Auto-generated method stub
}
//自定义的方法可以使用接口的泛型,也可以自定义泛型.
public void show(F f) {
}
}
/

*第二种:接口有泛型,子类与接口一致,遵守了对应的泛型
*类上的泛型确定了,接口上的泛型就确定了,重写方法上的泛型也就确定了
*/

class Cat implements Inter{
public void play(E e) {
// TODO Auto-generated method stub
}
}

通配符
表示一种或多种数据类型
a、限制上限:<? extends E>:限制的是整个<>中可以取的泛型类型是E类及E类的子类
b、限制下限:<? super E>:限制的是整个<>中可以取的泛型类型是E类及E类的父类

Map
a、Map与Collection的比较
b、Map接口的常用方法
c、Map的遍历----------------------------重点
d、hashMap的去重和TreeMap的去重,排序


V put(K key,V value) 增加一个键值对
map.put(key,value);


V remove(Object key) 根据key删除元素
map.remove(key)


V get(Object key) 根据key查找元素
map.get(key)
int size() 获取键值对的个数
map.size()

遍历
//Set keySet() 遍历方法一
//Set<Map.Entry<K,V>> entrySet() 遍历方法二

判断
boolean isEmpty() 里面是否有元素
boolean containsKey(K key) 是否包含当前的key
boolean containsValue(V value) 是否包含当前的value

Hash Map
对他的去重就是对key进行去重,方法与操作HashSet一致—通过给key重写hashCode和equals方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值