Java中的线性表:ArrayList和LinkedList

ArrayList和LinkedList定义在List接口下。List接口继承了Collection接口,定义了一个允许重复的有序合集。List接口增加了面向位置的操作,并且增加了一个能够双向遍历线性表迭代器。

Iterator接口的方法如下:

add():添加一个指定对象到线性表中。

hasPrevious():当往回遍历时,如果线性表遍历器还有更多的元素,则返回true

nextIndex():返回下一个元素的索引。

previous():返回该线性表遍历器的前一个元素。

previousIndex():返回前一个元素的索引。

set(element:E):使用指定的元素替换previous或next方法返回的最后一个元素。

数组线性表类ArrayList和链表类LinkedList是实现List接口的两个具体类。

ArrayList用数组存储元素,这个数组是动态创建的。如果元素的个数超过了数组容量,就创建一个更大的数组,并将当前数组中的所有元素都复制到新数组。LinkedList在一个链表中存储元素。如果需要通过下标随机访问元素,而不会在线性表其实位置插入或删除元素,则用ArrayList。否则选用LinkedList。

ArrayList的方法有:

ArrayList():用默认是初始容量创建一个空的线性表

ArrayList(c:Collection<? extends E>) :从已存在的合集中创建一个线性表

ArrayList(capactity:int):创建一个指定初始容量达到空的数组线性表

trimToSize():void 将该ArrayList实例的容量裁剪到该线性表的当前大小

 

LinkedList使用链表实现List接口,它还提供从线性表两端提取、插入和删除元素的方法,它的方法如下:

LinkedList():创建一个默认的空线性表

LinkedList(c:Collection<? extends E>):从已存在的合集中创建一个线性表

addFirst(element:E):void  添加元素到该线性表的头部

addLast(element:E):void添加元素到该线性表的尾部

getFirst():E   返回该线性表的第一个元素

getLast():E返回该线性表的最后一个元素

removeFirst():E从线性表中返回并删除第一个元素

removeLast():E  从线性表中返回并删除最后一个元素

package test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

public class project1 {
	public static void main(String []args) {
      List<Integer> arrayList=new ArrayList<>();
      arrayList.add(1);
      arrayList.add(2);
      arrayList.add(3);
      arrayList.add(4);
      arrayList.add(0, 10);
      
      LinkedList<Object> linkedList=new LinkedList<>(arrayList);
      linkedList.add(1,"red");
      linkedList.removeLast();
      linkedList.addFirst("black");
      
      ListIterator<Object> listIterator=linkedList.listIterator();
      while(listIterator.hasNext()) {
    	  System.out.println(listIterator.next()+" ");
      }
	}
}

ArrayList获取元素的效率会高一些;若在线性表的起始位置插入和删除元素,LinkedList的效率高一些。两种线性表在中间或末尾位置上插入和删除元素方面具有同样的性能。

get(i)是一个耗时的操作,尽量不要用它遍历线性表中的所有元素,应该采用迭代器。注意foreach循环隐式的使用了迭代器。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值