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);
作于202003061510,已归档
———————————————————————————————————
本文为博主原创文章,转载请注明出处!
若本文对您有帮助,轻抬您发财的小手,关注/评论/点赞/收藏,就是对我最大的支持!
祝君升职加薪,鹏程万里!
文章来源: winter.blog.csdn.net,作者:Winter_world,版权归原作者所有,如需转载,请联系作者。
原文链接:winter.blog.csdn.net/article/details/104684080
- 点赞
- 收藏
- 关注作者
评论(0)