当前位置: 首页 > article >正文

java 泛型返回接口

1.小练习
去除ArrayList中重复字符串元素

public static ArrayList<String> getSingle(ArrayList<String> list){
	ArrayList<String> newList = new ArrayList<String>();
	Iterator<String> itr = list.iterator();
	while (itr.hasNext()) {
		String obj = itr.next();
		if (!newList.contains(obj)) {		//contains()方法
			newList.add(obj);
		}	
	}
	return newList;
}

contain()方法判断是否包含
remove()方法判断自定义对象是否相同并删除
底层均依赖于.equals()方法

2.LinkedList类
特有method

void addFirst(E e); void addLast(E e);
E removeFist(); E removeLast();
E get(int index);

3.泛型generic
泛型用来避免类型转换异常(ClassCastException),<>中必须是引用数据类型,

(1)声明方法
在类上声明泛型:

class Name<T> {...}

方法泛型最好与类的泛型一致,如果不一致需要在方法上声明该泛型
在方法上声明泛型:

public<q> void xxx(Q q){...}

静态方法必须声明自己的泛型,因为静态方法是随着类的加载而进内存的,可能还没有声明类上的泛型。

public static<W> void xxx(w w) {...}

泛型接口:

interface Inter<T>{...}		//创建泛型的接口

class Demo implements Inter<String> {	//实现带有泛型的接口
	@Override
	...
}

(2)泛型通配符<?>
当右边的泛型是不确定时,左边可以指为?

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

? extends E : 向下限定,E及其子类

4.foreach 增强for循环
格式:

for(元素数据类型 变量 : 数组或者Collection集合){
	变量直接使用;
}

foreach底层依赖的是迭代器Iterator

5.List中三种删除元素的方法
普通for循环可以实现

for(int i = 0 ; i < list.size() ; i++){
	if("b".equals(list.get(i))){
		list.remove(i--);		//使用i--,否则会跳过一个数值
	}
}

Iterator迭代器
无法删除元素,因为会出现ConcurrentModificationException(并发修改异常)。

增强for循环
无法删除元素,因为foreach的底层使用迭代器Iterator实现的。

6.静态导入(导入类中的静态方法) jdk1.5新特性 不用
导入类中的静态方法,使用时可以直接使用方法,不需要加类名。

import static 包名.类名.方法名;
import static java.util.Arrays.sort;
...
sort(arr);

7.可变参数ChangeableArgs jdk1.5新特性
可变参数其实是一个数组

public void print(int ... xx);		//xx为数组

print(11,22,33);			//可变参数的参数列表中可以有任意个元素

8.集合和数组的互转
Arrays.asList() :数组转集合方法
底层用的是可变参数;
转换后的集合无法增删改元素,但是可以用集合的方法操作元素;
基本数据类型的数组转换成集合,会将整个数组当作一个对象来转换,改进方法:使用包装类。
Collection中的toArray(); 集合转数组方法
方法:<T> T toArray(T t); 使用:

String[] arr = list.toArray(new String[0]);
//新建数组的长度大于list的size,分配的长度为数组的长度
//反之,分配的长度等于list的size

文中出现的单词

concurrent 并发的;同时发生的
iterator 迭代器

http://www.kler.cn/a/371345.html

相关文章:

  • 关于InternVL2的模型训练二(如何训练目标定位模型)
  • 简单认识redis - 12 redis锁
  • 音频重采样(libresample)
  • 泛微开发修炼之旅--48关于ecology重写消息卡片中的创建时间和创建人的解决方案及源码
  • Flink CDC系列之:理解学习YARN模式
  • kotlin的this和it用法
  • vue使用rem适配各种分辨率设备
  • 【PTA】4-2 树的同构【数据结构】
  • 鸿蒙的底部菜单导航实现
  • appium自动化对已打开的app操作
  • pdf转为txt文本格式并使用base64加密输出数据
  • 事务的原理、MVCC的原理
  • Pytest的测试用例相关问题总结
  • Linux下安装软件
  • 江协科技STM32学习- P22 实验-ADC单通道/ADC多通道
  • 交叉编译 lmbench(riscv64)
  • synchronized进阶原理
  • Python实现全国岗位招聘信息可视化分析(源码+论文+部署讲解)
  • 中国分省统计面板数据(2004-2023)-最新出炉_附下载链接
  • JavaEE初阶------网络编程续+传输层UDP协议介绍
  • Educational Codeforces Round 171 (Rated for Div. 2) A~E
  • 【Linux】动静态库:构建强大软件生态的基石
  • 张量分析与连续介质力学
  • 【vue】07.自定义指令
  • GitHub Copilot将支持来自Anthropic、Google和OpenAI的模型
  • 双指针——对撞指针与左右指针