Java数据结构笔记2——数组线性表类(ArrayList)

图1 . ArrayList在Java集合框架中的位置
这里写图片描述


数组线性表类(ArrayList)和链表类(LinkedList)是实现List的两个链表类,ArrayList是基于数组的,也就是说它用数组来存储元素,而且这个数组是动态创建的。

想象一下,我们用数组来存储一个日常事务清单时该怎么做呢?我们必须在创建数组时定义数组的长度,然后将日常事务一件件存储进去。假设我们定义了一个5个项目的事务清单(数组A长度为5),这时候我们想要再添加一项怎么做呢?1、我们可以定义一个长度为6的数组B,然后把A中的项目全都赋值到B中,然后再在末尾添加一项。2、我们也可以事先定义一个长度为100的数组,那么对于小于100条记录来说,这个数组就是动态的了

ArrayList正是基于第二种方法的。如果元素个数超过了数组的容量,就创建一个新数组,并把所有元素都复制到新数组里面,显而易见,这种方法效率较低。
ArrayList两个显而易见的缺点:

  • 使用ArrayList的实例比使用数组的效率低。
  • ArrayList的实例只可以存储对象,它不能包含基本类型,例如int,double,char.(实际使用时,用Double代替double,用Integer代替int)

ArrayList类

这个类实际上是这样的

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable
  1. ArrayList类的一些方法
//构造方法
ArrayList<E>()  //以指定的E基类型创建一个空列表,长度为默认长度10
ArrayList<E>(int initialCapacity) //以制定的E基类型和初始容量创建一个空列表
//方法
public boolean add(E element)  
//将指定元素添加到序列尾部,序列的长度增加1,如果需要的话,序列的容量将增加,如果添加成功,则返回true
public void add(int index,E element) 
//将指定元素添加到指定下标位置,后继元素下标加一,如果需要的话,序列的容量将增加,如果index<0或者index>size(),将跑出IndexOutOfBoundsException异常
public E get(int index) 
//取得序列号为index的元素,如果index<0或者index>=size(),则抛出IndexOutOfBoundsException
public E set(int index,E element)
//用给定元素代替index指定的元素,返回被代替的元素,如果index<0或者index>=size(),则抛出IndexOutOfBoundsException
public E remove(int index)
//移除并返回index指定的元素,后继位置下边减1。如果index<0或者index>=size(),则抛出IndexOutOfBoundsException
public int size() //返回元素的个数
public void clear() //清除序列中的所有元素
public boolean contains(Object element) //查询序列中是否存在元素element,如果存在返回true
public int indexOf(Object element)  //返回序列中第一次出现element时的序号
public boolean isEmpty()   //返回序列是否为空

2. 创建一个ArrayList对象

package edu.hhu.geometry;

import java.util.ArrayList;
import java.util.Scanner;

public class ArrayListDemo {
    public static void main(String[] args) {
        ArrayList<String> arr = new ArrayList<String>();
        System.out.println("Enter item for the list");
        boolean done = false;
        Scanner keyS = new Scanner(System.in);
        while (!done) {
            System.out.println("please entry:");
            String entry = keyS.nextLine();
            arr.add(entry);
            System.out.println("any more list?");
            String ans = keyS.nextLine();
            if(!ans.equalsIgnoreCase("yes"))
            {
                done = true;
            }
        }
        System.out.println(arr.size());
        //以下二种遍历方法选其一
        /*for(int i = 0;i<arr.size();i++)
        {
            System.out.println("No:"+i+","+arr.get(i));
        }*/
        for(String eString:arr)
        {
            System.out.println(eString);

        }
    }
}

下一节将自己动手创建一个动态数组MyArrayList,以加深对ArrayList的理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值