超牛牪犇Java之泛型

泛型:

标识着集合中保存的元素是什么类型

写法:<泛型(类型)>

ArrayList<String>

好处:

1.操作数据更加安全(规范集合中 能保存的数据)

2.可以避免向下转型(强转类型)的麻烦

3.将运行时的错误 转到编译时报错

example:

泛型写的时候 前后类型要一致

ArrayList<String> list  = new ArrayList<String>();

(JDK1.7之后有菱形泛型 后面的类型可以省去)

ArrayList<String> list  = new ArrayList<>();

遍历集合

ListIterator<String> listIterator = list.listIterator();

正向遍历:

while (listIterator.hasNext()) {
	//获取集合中的元素
	String string = listIterator.next();
	System.out.println(string);
}

逆向遍历:

//判断前一个是否有元素
while (listIterator.hasPrevious()) {
	String preivous = listIterator.previous();
	System.out.println(preivous);
}

注意:当只进行逆向遍历时 会无法打印内容 因为默认有个指针在最前面的位置 逆向遍历是从后面开始指针无法移动

不加泛型 在集合中保存三个学生:

ArrayList list = new ArrayList();
list.add(new Student("张三",11));
list.add(new Student("李四",12));
list.add(new Student("王五",13));

从集合中取出一个元素 强转成工人类型, 并调用工人的工作方法:

Object object2 = list.get(1);
Worker worker = (Worker)object2;
worker.work();

编译不会报错,但此时运行会报错:


不加泛型 获取到集合中的匀速 元素类型可以随便强转 没有约束 编译都会通过

加上泛型 在编译时就会有错误提示 可以让集合中保存的元素 更加安全


example:

int[] array = {1,2,3,4,5};
List<int[]> list = Arrays.asList(array);
System.out.println(list);

结果:

原因 直接传入int[] 系统不会帮你进行自动装箱 ,这个集合中的每一个元素都是数组

Integer[] newArray = {1,2,3,4,5};
//直接把数组中的元素 放入了集合中
List<Integer> newList = Arrays.asList(newArray);
System.out.println(newList);

结果:

第二种泛型:

写法:

? extends E

问号是子类 E是父类

只能使用父类的子类 或 本类(也叫向下限定)

example:

//创建一个person集合 保存两个person 
ArrayList<Person> list1 = new ArrayList<>();
list1.add(new Person("wang1",1));
list1.add(new Person("wang2",2));
//创建一个student集合 保存两个student
ArrayList<Student> list2 = new ArrayList<>();
list2.add(new Student("peng1",1));
list2.add(new Student("peng2",2));
//addAll(Collection<Student extends Person> c) 
list1.addAll(list2);
System.out.println(list1);

循环删除:

//创建一个集合保存abcd
//如果有b就把b删了(使用循环)
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("d");
for (int i = 0; i < list.size(); i++) {
	if (list.get(i).equals("b")) {
        //因为删除之后长度会减少 后面的会向前补位 
	//所以删除后要退回下标 不然会跳过下一个
	list.remove(i--);
	}
}
System.out.println(list);
迭代器遍历时 要用迭代器类中的删除方法(避免出现并发修改异常)

多参数的参数:

int .. num 这个参数 可以看成是一个数组

可以当做数组来遍历

使用方式有两个:

1.直接传一个数组

2.可以传多个数 用逗号分开

注意:多个参数时 最好把多参数放到最后

public static void fun4(int a ,int ... num) {
	for (int i = 0; i < num.length; i++) {
		System.out.println(num[i]);
	}
}

添加一个元素

UnsupportedOperationException

不支持的操作异常

使用asList方法 将数组转化成集合

注意:不能对集合的长度发生改变(不能增删)

转化成集合后 可以调用集合中其他方法






源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值