java网课|collection&泛型

P238 collection集合概述

集合与数组有什么区别?

数组:

  • 长度不可改变
  • 存放基本数据类型的值
  • 都是同一种类型的

集合:

  • 长度可以改变
  • 存储的是对象
  • 对象的类型可以不一样
int[]a=new int[2];

Student[]arr=new Student[3];
ArrayList<Student><String><Integer>

P239 集合框架

Vector集合/ArrayList集合/LinkedList集合/

如何使用集合存储数据?

如何遍历集合?

集合的特性有哪些?

在这里插入图片描述
继承:子类共性抽取,形成父类(接口)

学习顶层,使用底层的类

P239

LIST:有索引
set:无索引

collection:

  • 层次结构中的根接口
  • 表示一组对象
  • 这些对象也成为collection的元素
  • 一些collection可以有重复元素,一些不可以

java.util.Collection接口:

  • 所有单列集合的最顶层接口,里面定义了所有单列集合共性的方法
  • 任意的单列集合都可以使用collection接口中的方法

共性的方法:

public boolean add(E e);//把给定的对象添加到当前集合中
public void clear();//清空集合中的所有元素
public boolean remove(E e);//把给定的元素在当前集合中删除
public boolean isEmpty();//判断当前集合是否为空
public Object[] toArray();//把集合中的元素,存储到数组中

P246 泛型

前请提要

  • 集合中是可以存放任意对象
  • 把对象存储集合后,那么这时他们都会被提升成Object类型
  • 当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换

什么是泛型?

一种【未知的数据类型】

当我们不知道使用什么数据类型的时候,使用泛型

也可以看成一个变量==》接收数据类型的【变量】

  • E e:Element 元素
  • T t:Type 类型

使用场景?

ArrayList集合

  • 在定义时,不知道集合中会存储什么类型的数据==》类型使用泛型
public class ArrayList<E>{//E是未知的数据类型
	public boolean add(E e){}//元素的数据类型可以泛型!
	public E get(int index){}//返回值类型也可以做泛型!
	}

👇
当要使用(【创建一个集合对象】)时,就会确定泛型的数据类型

ArrayList<String>list=new ArrayList<String>();//确定了是String类型!
👇String作为参数传过来
public class ArrayList<String>{//E是未知的数据类型
	public boolean add(String e){}
	public String get(int index){}
	}

P247 使用泛型和不使用泛型的区别?

创建集合对象时,如果不使用泛型:

  • 默认的类型就是Object类型
  • 可以存储任意类型的数据
  • but,不安全,会引发异常
    在这里插入图片描述
    会抛出ClassCastException类型转换异常,不能把Integer—》String类型

使用泛型

  • 好处:
  • 避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型
  • 把运行期异常(代码运行后抛出的异常)提升到了编译器(写代码的时候就报错)
  • 坏处:
  • 泛型是什么类型,就只能存储什么类型的数据
    在这里插入图片描述

P248 定义和使用含有泛型的【类】

定义一下这个含有泛型的类

public class GenericClass<E>{
	private E name;//name是泛型
	public E getName(){//函数返回值是泛型(因为要返回的是name)
		return name;
		}
	public void setName(E name){//是泛型
		this.name=name;//传参的name赋给成员的name
		}

泛型可以运用于不同的类,方法,接口当中!!
在这里插入图片描述
使用泛型的案例:
在这里插入图片描述
GenericClass类使用了泛型E,
创建的对象gc可以是integer/String类型任选

P249 定义和使用含有泛型的方法

//定义一个含有泛型的方法
public <M>void method(M m){//注意传参处,是泛型!!!
	sout(m);
	}

//调用时
ClassName gm=new ClassName();//创建对象gm
gm.method(10);//传递的是int类型
gm.method("abd");//传递是string类型

含有泛型的方法,在【调用方法】的时候确定【泛型的数据类型】
【传递什么类型的参数】,泛型就是什么类型

含有泛型的静态方法呢?

//定义一个含有泛型的静态方法
public static<S>void method(S s){
	...sout(s)
	}
//调用(静态直接用类名调用
ClassName.method(1);//int型,输出1
ClassName.method("add");//string型,输出add

P250 定义和使用含有泛型的接口

定义含有泛型的接口

public interface ClassName<I>{//含有泛型I类型
	public abstract void method(I i);
	}

使用方法一:定义接口的实现类,实现接口,指定接口的泛型

在实现类中传递E类型

public class ClassName implements InterfaceName<String>{//实现类此处就传入了String
	@override
	public void method(String s){//将接口中的抽象方法重载,给定泛型类型String
		sout(s);
		}
	}

使用方法二:接口使用什么泛型,实现类也用,类跟着接口走

相当于===》定义了一个含有泛型的类,[创建对象]的时候确定泛型的类型

public class ClassName<I> implements InterfaceName<I>{//注意类名后面多了《i》
	@override
	public void method(I i){//
		sout(i);
		}
	}

//创建对象
ClassName gi1=new ClassName();
gi1.method(1);//创建对象时确定泛型为int

P251 泛型的通配符

  • ?:代表任意的数据类型
  • 不能创建对象使用
  • 只能作为方法的参数使用

例如:定义一个方法,能遍历所有类型的ArrayList集合

  • 不知道集合使用什么数据类型—》可以用泛型的通配符?接收数据类型
public static void printArray(ArrayList<Integer>list){//integer会报错,object也会??

在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值