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

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

实现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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值