java 泛型返回接口

ops/2024/10/30 7:07:13/

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.ppmy.cn/ops/129521.html

相关文章

Soft TeacherEnd-to-End Semi-Supervised Object Detection with Soft Teacher

Soft Teacher:End-to-End Semi-Supervised Object Detection with Soft Teacher 论文&#xff1a;End-to-End Semi-Supervised Object Detection with Soft Teacher Abstract ​ 相较于之前更复杂的多阶段方法&#xff0c;本论文提出了一个端到端的半监督目标检测方法。这个…

Amcor 如何借助 Liquid UI 实现SAP PM可靠性

背景介绍 安姆科是塑料行业的全球领军企业&#xff0c;该企业认识到 SAP 工厂维护&#xff08;SAP PM&#xff09;对于确保高效的维护管理的重要性。 在诸如制造业等高度依赖机械设备的行业中&#xff0c;SAP PM是一种通过数据驱动决策来最大限度减少停机时间、降低间接成本、…

Java基础-JVM

JVM构成部分 类加载系统 类加载子系统的作用是将磁盘中的.class文件加载到内存当中。工作过程如下&#xff1a; 加载&#xff1a;通过类全路径名获取二进制字节流&#xff1b;将这个二进制字节流代表的数存储构转化为方法区运行时数据结构&#xff1b;在内存生成一个代表该类的…

git clone完整使用手册

git-clone - 将一个仓库克隆到一个新目录中 用法 git clone [--template<模板目录>][-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror][-o <名称>] [-b <名称>] [-u <上传包>] [--reference <仓库>][--dissociate] [--separate-git-d…

Python毕业设计选题:基于Web学生会网站的设计与实现-django

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 系统首页界面 用户注册界面 用户登录界面 校内报道界面 品牌活动界面 个人中心界面 …

vue使用prototype

在main.js中添加一个变量到 Vue.prototype Vue.prototype.$appName My App这样 $appName 就在所有的 Vue 实例中可用了&#xff0c;甚至在实例被创建之前就可以 beforeCreate: function () {console.log(this.$appName)}控制台会打印出 My App

HTML入门教程2:HTML发展历史

HTML的诞生 起源时间&#xff1a;1989年创始人&#xff1a;蒂姆伯纳斯-李&#xff08;Tim Berners-Lee&#xff09; HTML最初由蒂姆伯纳斯-李在CERN&#xff08;欧洲核子研究中心&#xff09;提出。当时&#xff0c;互联网正处于萌芽阶段&#xff0c;伯纳斯-李为了实现全球科…

Spring Boot植物健康系统:绿色科技的突破

3系统分析 3.1可行性分析 通过对本植物健康系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本植物健康系统采用SSM框架&#xff0c;JAVA作为开发语言&#…