黑马程序员技术交流社区

标题: List集合接口 [打印本页]

作者: dadai5ai    时间: 2015-7-31 09:54
标题: List集合接口

List接口是Collection之中最为常用的子接口,也是大家在开发过程之中主要使用的接口。但是List子接口针对于Collection子接口做了大量的功能扩充,而主要扩充的方法有如下几个:

No.
方法名称
类型
描述
1
public E get(int index)
普通
取得指定索引位置上的对象
2
public E set(int index, E element)
普通
修改指定索引位置上的对象
3
public ListIterator listIterator()
普通
为ListIterator接口实例化

     那么接口完成后如果要想使用接口那么一定需要子类,而常用的两个子类:ArrayList、Vector。

4.1、新的子类:ArrayList(90%)

       ArrayList是在JDK 1.2之后引入的,或者更加明确的讲像Collection、List等都是JDK 1.2之后引入的,也是在List接口使用过程之中最为常见的一个子类。

范例:使用ArrayList

package cn.mldn.demo;
import java.util.ArrayList;
import java.util.List;
public class TestDemo {
    public static void main(String[] args) throws Exception {
        List all = new ArrayList() ;
        all.add("HELLO") ;
        all.add("HELLO") ;  // 保存了重复数据
        all.add("WORLD") ;
        System.out.println(all);
    }
}

       但是在很多时候可以采用循环的方式输出,因为在List子接口里面扩充了一个get()方法,所以就可以使用for循环。

范例:循环输出List集合

package cn.mldn.demo;
import java.util.ArrayList;
import java.util.List;
public class TestDemo {
    public static void main(String[] args) throws Exception {
        List all = new ArrayList() ;
        all.add("HELLO") ;
        all.add("HELLO") ;  // 保存了重复数据
        all.add("WORLD") ;
        for (int x = 0; x < all.size(); x++) {
            System.out.println(all.get(x));
        }
    }
}

范例:验证其它方法

package cn.mldn.demo;
import java.util.ArrayList;
import java.util.List;
public class TestDemo {
    public static void main(String[] args) throws Exception {
        List all = new ArrayList() ;
        System.out.println(all.isEmpty());
        all.add("HELLO") ;
        all.add("HELLO") ;  // 保存了重复数据
        all.add("WORLD") ;
        System.out.println(all.isEmpty());
        all.set(0, "hello") ;   // 此方法也是List扩充
        all.remove("WORLD") ;
        System.out.println(all);
    }
}

       但是以上的程序之中发现操作的数据类型都是String,那么String类是一个比较完善的类,那么下面使用一个自定义的类进行操作。

范例:保存自定义类对象

package cn.mldn.demo;
import java.util.ArrayList;
import java.util.List;
class Person {
    private String name ;
    private int age ;
    public Person(String name,int age) {
        this.name = name ;
        this.age = age ;
    }
    @Override
    public String toString() {
        return "姓名:" + this.name + ",年龄 :" + this.age + "\n" ;
    }
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false ;
        }
        if (this == obj) {
            return true ;
        }
        if (!(obj instanceof Person)) {
            return false ;
        }
        Person per = (Person) obj ;
        if (per.name.equals(this.name) && per.age == this.age) {
            return true ;
        }
        return false ;
    }
}
public class TestDemo {
    public static void main(String[] args) throws Exception {
        List all = new ArrayList() ;
        all.add(new Person("张三",20)) ;
        all.add(new Person("李四",21)) ;
        all.add(new Person("王五",19)) ;
        all.remove(new Person("王五",19)) ;  // 删除
        System.out.println(all.contains(new Person("李四",21)));
        System.out.println(all);
    }
}

]         那么在之前使用的链表操作,在List接口上可以方便的使用,使用的规则与之前完全一样,可是List所采用的程序的逻辑更加合理,性能更好,所以不会使用自定义链表,都会使用List接口操作。

4.2、旧的子类:Vector(10%)

         Vector是从JDK 1.0的时候引入的操作类,最早是用于纯粹的保存多个对象,同时在JDK 1.2之后为了让其可以继续使用,于是让Vector类多实现了一个List接口,所以List接口下有两个常用的子类:ArrayList、Vector。

         既然Vector也是List接口的子类,所以在使用上,不管使用ArrayList还是Vector不会有任何的区别。

范例:验证Vector

package cn.mldn.demo;
import java.util.List;
import java.util.Vector;
public class TestDemo {
    public static void main(String[] args) throws Exception {
        List all = new Vector() ;
        all.add("HELLO") ;
        all.add("HELLO") ;  // 保存了重复数据
        all.add("WORLD") ;
        System.out.println(all);
    }
}

面试题:请解释ArrayList和Vector区别?

No.
区别
ArrayList
Vector
1
推出时间
JDK 1.2时推出
JDK 1.0时推出
2
性能
采用异步处理方式,性能较高
采用同步处理方式,性能较低
3
安全性
数据安全性差
数据安全性高
4
输出
Iterator、ListIterator、foreach
Iterator、ListIterator、foreach、Enumeration

        考虑到日后的开发异步开发居多,所以以ArrayList类为主。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2