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

目录

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

        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);

发布了86 篇原创文章 · 获赞 53 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/w464960660/article/details/104684080