java集合框架--实现List接口类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/daicooper/article/details/80863011

了解了集合框架中定义的接口,接着要了解实现它们的标准类。一些类提供了完整的可以被使用的工具。另一些类是抽象的,可作为创建具体类集的起始点。集合框架中定义的类集合是非同步的,但也可获得同步版本。

实现List接口的类:

描述
AbstractCollection 抽象类,实现大多数 Collection 接口中的方法
AbstractList 抽象类,继承AbstractCollection 并实现大多数 List 接口中的方法
AbstractSequentialList 抽象类,继承AbstractList,该类集使用连续而不是随机的方式访问其元素
LinkedList 通过继承AbstractSequentialList 来实现链接列表
ArrayList 通过继承 AbstractList来实现动态数组
Vector 可增长的动态数组,和ArrayList类似,支持同步特性
Stack 继承 Vector,实现了栈的数据结构

实现List 接口的类图

这里写图片描述

1.ArrayList类

Arraylist 类继承 AbstractList 并实现 List接口。 ArrayList 支持可随需要增长的动态数组。在 Java 中,标准数组是定长的。在创建数组之后,它们不能被加成或缩短,这也就意味着必须事先知道数组可以容纳多少元素。但是,用户通常知道运行时才能知道需要多大的数组。 为了解决这个问题,集合框架定义了 ArrayList。

ArrayList能够动态地增加或减少其大小。 ArrayList的对象以一个初始大小被创建。当超过了它的大小时,可自动增大。当对象呗删除后,就可以自动缩小。

注意:动态数组也被从前版本遗留下来的类 Vector 所支持。 ArrayList 的性能比传统的 Vector 要好。

ArrayList的构造函数:

    ArrayList();
    ArrayList(Collection c);
    ArrayList(int capacity);

其中 第一个构造函数建立一个空的数组列表。第二个构造函数建立一个数组列表,该数组列表由类集 c 中的元素初始化。 第三个构造函数建立一个数组列表,该数组有指定的初始容量(Capacity)。容量是用于存储元素的基本数组大小。当元素被追加到数组列表上时,容量会自动增加。

ArrayList类的使用

import java.util.*;
public class ArrayListDemo {
    public static void main(String[] args) {
        ArrayList al = new ArrayList();
        System.out.println("List 的初始大小:" + al.size());
        al.add("A");
        al.add("B");
        al.add("C");
        al.add("D");
        al.add("E");
        al.add("F");
        al.add(1,"A2");
        System.out.println("元素增加后的大小:" + al.size());
        System.out.println("List 中的内容:"+ al);
        al.remove("D");
        al.remove(2);
        System.out.println("删除元素后的大小:" + al.size());
        System.out.println("内容" + al);
    } 
}
// List 的初始大小:0
// 元素增加后的大小:7
// List 中的内容:[A, A2, B, C, D, E, F]
// 删除元素后的大小:5
// 内容[A, A2, C, E, F]  

使用了 toString() 方法默认转换显示类集的内容,toString()方法是从 AbstractCollection 继承下来的。尽管 它对简短的程序来说是足够了,然而很少使用这种方法显示类集中的内容 。通常自己提供输出程序。

从 ArrayList获取得到数组:

当时用 ArrayList 时,有时想要获取一个实际的数组,这个数组包含了列表的内容。可以通过调用方法 toArray() 来实现它。下面可能是想将类集转换为数组的原因:

  • 对于一些操作,可以获得更快的处理速度。
  • 为了给方法传递数组,而方法不必重载区接收类集。
  • 为了将新的基于类集的程序与不认识的类集的老程序集成。
import java.util.*;
public class ArrayListDemo {
    public static void main(String[] args) {
        ArrayList al = new ArrayList();
        al.add(new Double(10.3));
        al.add(new Double(20.4));
        al.add(new Double(30.5));
        al.add(new Double(40.6));
        al.add(new Double(50.7));
        System.out.println("内容:"+ al);

        Object a[] = al.toArray();
        double sum = 0;
        for (int i = 0; i < a.length; i++){
            sum += ((Double)a[i]).doubleValue();
        }

        System.out.println("Sum :" + sum);  
    } 
}
// 内容:[10.3, 20.4, 30.5, 40.6, 50.7]
// Sum :152.5

LinkedList类

LinkedLIst 类继承了 AbstractSequentialList并实现了接口 List。它提供了一个连接列表数据结构。它具有如下的两个数据结构:

    LinkedList();
    LinkedList(Collection c);

第一个构造函数建立一个空的连接列表。第二个构造函数建立一个连接列表,由类 c 中的元素初始化。

除了所继承的方法之外,LinkedList 类本身还定义了一些有用的方法,这些方法主要用于操作和访问列表。

使用 addFirst() 方法可以在列表头增加元素,使用 addLast()方法可以在列表的尾部增加元素。其形式如下:

void addFirst(Object obj);
void addLast(Object obj);

调用 getFirst()方法可以获得第一个元素。调用getLast()方法可以获得最后一个元素,其形式如下:

object getFirst();
object getLast();

为了删除第一个元素,可以使用 removeFirst() 方法,为了删除最后一个元素,可以调用 removeLast() 方法, 其形式如下:

Object removeFirst();
Object removeLast();

为了判断一个元素是否在列表中定义 了 contains() 方法,其形式如下:

boolean contains(Object elem);

LinkedList 操作

import java.util.*;
public class ArrayListDemo {
    public static void main(String[] args) {

        LinkedList ll = new LinkedList();
        System.out.println("List 的初始大小:" + ll.size());

        ll.add("A");
        ll.add("B");
        ll.add("C");
        ll.add("D");
        ll.add("E");
        ll.add("F");
        ll.add(0,"A2");
        System.out.println("增加元素后的大小:" + ll.size());
        System.out.println("List 中的内容:"+ll);
        ll.remove("D");
        ll.remove(2);
        System.out.println("是否包含元素 C:"+ll.contains("C"));
        System.out.println("是否包含元素 D:"+ll.contains("D"));

        ArrayList al = new ArrayList(ll);
        ll.clear();
        System.out.println("List 是否为空:"+ll.isEmpty()); 
        ll.addAll((al));
        System.out.println("List 中的内容"+ll);

        ll.addFirst("A3");
        ll.addLast("A4");
        System.out.println("List 中的内容"+ll); 
    } 
}
// List 的初始大小:0
// 增加元素后的大小:7
// List 中的内容:[A2, A, B, C, D, E, F]
// 是否包含元素 C:true
// 是否包含元素 D:false
// List 是否为空:true
// List 中的内容[A2, A, C, E, F]

猜你喜欢

转载自blog.csdn.net/daicooper/article/details/80863011