Java——类集框架:List集合接口的详解及应用举例
1、Java类集框架简介
JDK1.2开始引入了类集框架的概念,Java中可以方便实现动态数组的操作,JDK1.5中泛型的出现,类集又避免了Object类对程序的影响。所有的类集开发类都保存在java.util包中。从JDK1.8中,类集支持了数据流的操作,支持MapReduce的操作。
一句话:类集的本质就是动态对象数组
2、类集框架核心接口
java.util包类集框架核心接口包括:
- Collection接口(80%):负责保存单值的最大父接口;
- List子接口(90%):可以保存重复元素,数据的保存顺序为数据的增加顺序;
- Set子接口(10%):不可以保存重复元素,内部元素顺序可以调整;
- Map接口(20%):提供的就是key与value的匹配信息;
- 输出接口:Iterator、ListIterator、Enumeration。
结论:所有的集合保存数据目的就是为了输出。
- Collection保存数据纯粹为了输出,所以最关注的就是增加与输出数据;
- Map保存数据为了根据key查找value,是为了查找准备的。
Collection涉及的关键方法包括:
名称 |
作用 |
---|---|
public boolean add(E e); |
向集合中追加数据 |
public void clear(); |
清空集合 |
public boolean contains(Object o); |
判断集合内容是否存在 |
public boolean isEmpty(); |
判断集合是否为空 |
public int size(); |
获取集合中保存的数据个数 |
public boolean remove(Object o); |
删除数据,依靠equals方法支持 |
public Iterator<E> iterator() |
取得Iterator对象接口 |
add、Iterator两个方法使用频率较高。
3、List集合接口
List子接口保存数据的最大特点是可以进行重复数据的保存,其对Collection接口进行大量方法补充,常用的几个:
名称 |
作用 |
---|---|
public E get(int index) |
根据索引取得指定元素 |
public E set(int index,E element) |
修改指定索引元素的内容 |
public ListIterator<E> listIterator() |
为ListIterator接实例化 |
List属于接口,通过子类取得接口的示例化对象,常用的两个子类:ArrayList、Vector。List子接口继承结构如下:
3.1、ArrayList子类
JDK1.2时候推出的,只要使用了List接口,一般首选就是ArrayList。 【举例】:保存自定义类对象,删除指定index元素,注意contains、remove操作方法需要equals方法的支持,因此自定义类中需要覆写equals方法,否则contains、remove方法是无效的(remove直接删除指定index的话是有效的)。
List<Child> all = new ArrayList<Child>();
all.add(new Child(10,"张三","大庆"));
all.add(new Child(11,"李四","北京"));
all.add(new Child(12,"赵五","南京"));
all.remove(new Child(12,"赵五","南京"));
System.out.println(all);
//自定义类对象存在List中删除测试
class Child{
private int age;
private String name;
private String loc;
public Child(int age, String name, String loc) {
this.age = age;
this.name = name;
this.loc = loc;
}
@Override
public String toString() {
return "Child{" +
"age=" + age +
", name='" + name + ''' +
", loc='" + loc + ''' +
'}';
}
@Override
public boolean equals(@Nullable Object obj) {
if(obj==null){//判断是否为空,若不判断则会出先空指针异常(NullPointerException)
return false;
}
if(this==obj){//判断是否在与自身比较(通过比较地址),若是则直接返回true
return true;
}
if(!(obj instanceof Child)){//instanceof作用为判断其左边对象是否为右边对象的实例,此处为判断主方法中equals()方法括号中的对象是否为Person类
return false;
}
//到达此处时必定是同类但不同地址的对象在比较
Child child=(Child)obj;//向下转型,比较属性值
return this.age==child.age && this.name.equals(child.name)&& this.loc.equals(child.loc);//判定属性内容是否相等
}
}
3.2、Vector子类
属于旧的子类,打开Java Doc文档,可发现Vector与ArrayList的继承结构完全相同
Vector类中的方法基本是同步方法,属于线程的安全操作。
【举例】:利用Vector为List子接口实例化,操作上基本与ArrayList类似,不再写代码了,具体上只能根据源码来看。
ArrayList与Vector的具体区别是什么呢?
序号 |
区别点 |
ArrayList(90%) |
Vector(10%) |
---|---|---|---|
1 |
推出时间 |
JDK1.2 |
JDK1.0 |
2 |
性能 |
异步处理,性能较高 |
同步处理,性能较低 |
3 |
安全性 |
非线程安全的操作 |
线程安全操作 |
4 |
输出 |
Iterator、ListIterator、foreach |
Iterator、ListIterator、foreach、Enumeration |
ArrayList是最常用的,以它的使用为主。
3.3、LinkedList子类
其为List接口的子类,操作上基本与ArrayList类似,也不再写代码了,要观察其与ArrayList的区别,需要看操作方法:
LinkedList是真正链表的实现类,功能比ArrayList跟丰富,但大部使用不到这个类,最多用的还是ArrayList.
3.4、小结
1)List子接口比Collection定义了更多的方法,List子接口中主要使用ArrayList子类。
2)List有一个关键方法,public E get(int index);
- Java Mail(三):Session、Message详解
- .NET Core采用的全新配置系统[8]: 如何实现配置与源文件的同步
- 四个问答让你秒懂区块链原理及应用
- .NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?
- 【机器学习实战】第11章 使用 Apriori 算法进行关联分析
- 【Scikit-Learn 中文文档】概率校准 - 监督学习 - 用户指南 | ApacheCN
- ASP.NET MVC路由扩展:链接和URL的生成
- .NET Core采用的全新配置系统[10]: 配置的同步机制是如何实现的?
- C+实现神经网络之贰—前向传播和反向传播
- 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[上]:采用管道处理请求
- 2017奇葩机器人大盘点:一言不合让你变瞎
- 【机器学习实战】第14章 利用SVD简化数据
- 异步数据存储声明
- 区块链学堂——公有链、私有链、联盟链、侧链、互联链
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 三日php之路 -- 第一天(初识php)
- NoSQL数据库 -- MongoDB
- 数据抓取练习
- python基础 -- 简单实现HTTP协议
- RabbitMQ 学习
- asp连接access,增删改查
- Spring 中的如何自定义事件处理(Custom Event)
- python基础 -- 自定义排序
- nginx(安装)
- Spring 中基于 AOP 的 XML操作方式
- python基础 -- 内建函数
- virtualenv 安装及使用
- Git 分布式版本控制 -- (1、基本使用)
- python爬虫----(scrapy框架提高(1),自定义Request爬取)
- python基础 -- 异常处理try的使用及一些思考