Java——类集框架:List集合接口的详解及应用举例

举报
Winter_world 发表于 2021/09/28 23:38:24 2021/09/28
【摘要】 目录 1、Java类集框架简介 2、类集框架核心接口 3、List集合接口 3.1、ArrayList子类 3.2、Vector子类 3.3、LinkedList子类 3.4、小结 1、Java类集框架简介 JDK1.2开始引入了类集框架的概念,Java中可以方便实现动态数组的操作,JDK1.5中泛型的出现,类集又避...

目录

1、Java类集框架简介

2、类集框架核心接口

3、List集合接口

3.1、ArrayList子类

3.2、Vector子类

3.3、LinkedList子类

3.4、小结


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的话是有效的)。


  
  1. List<Child> all = new ArrayList<Child>();
  2. all.add(new Child(10,"张三","大庆"));
  3. all.add(new Child(11,"李四","北京"));
  4. all.add(new Child(12,"赵五","南京"));
  5. all.remove(new Child(12,"赵五","南京"));
  6. System.out.println(all);
  7. //自定义类对象存在List中删除测试
  8. class Child{
  9. private int age;
  10. private String name;
  11. private String loc;
  12. public Child(int age, String name, String loc) {
  13. this.age = age;
  14. this.name = name;
  15. this.loc = loc;
  16. }
  17. @Override
  18. public String toString() {
  19. return "Child{" +
  20. "age=" + age +
  21. ", name='" + name + '\'' +
  22. ", loc='" + loc + '\'' +
  23. '}';
  24. }
  25. @Override
  26. public boolean equals(@Nullable Object obj) {
  27. if(obj==null){//判断是否为空,若不判断则会出先空指针异常(NullPointerException)
  28. return false;
  29. }
  30. if(this==obj){//判断是否在与自身比较(通过比较地址),若是则直接返回true
  31. return true;
  32. }
  33. if(!(obj instanceof Child)){//instanceof作用为判断其左边对象是否为右边对象的实例,此处为判断主方法中equals()方法括号中的对象是否为Person类
  34. return false;
  35. }
  36. //到达此处时必定是同类但不同地址的对象在比较
  37. Child child=(Child)obj;//向下转型,比较属性值
  38. return this.age==child.age && this.name.equals(child.name)&& this.loc.equals(child.loc);//判定属性内容是否相等
  39. }
  40. }

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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。