collection---List

本文详细对比了ArrayList与LinkedList这两种常用的数据结构。ArrayList适用于频繁查询场景,而LinkedList则更适合需要快速增删元素的情况。此外,还介绍了这两种数据结构的特定方法及使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ArrayList:作为List集合下面的一个分支,肯定具有List的基本特征,即元素有序且可重复。因为它底层使用的数据结构是数组结构,所以它具有查询速度快,但是增删相对麻烦的特点,并且线程不同步。

LinkedList:这个容器底层使用的数据结构是链表数据结构,它具有增删速度很快,但是查询的速度很慢的特点

Vector:这个容量底层是数组数据结构,其实它有一个独特的取出方式,枚举,但是因为枚举的名称和方法都过长,又和迭代器的取出方式一样,所以背迭代器取代了

Iterator:迭代器:其实就是一个用于取出容器中元素的方式,里面只有判断,取出和删除的操作,所以,在用迭代器进行元素的操纵时,不能用集合对象的方法操作元素,那样会发生ConcurrentModificationExcepton异常,如果必须要进行添加修改等操作时,就需要用到一个List集合特有的接口,ListIterator。


以上这些子集合的方法中,和Collection重复的方法就不再说了,我们需要注意的是一些特有的方法

ArrayList:

import java.util.*;
class ListDemo
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
	public static void method()
	{
		ArrayList a1=new ArrayList();
		
		//添加元素
		a1.add("java01");
		a1.add("java02");
		a1.add("java03");
		
		sop("元集合是:"a1);
		
		//在指定位置添加元素
		a1.add(1,"java09");
		
		//删除指定位置的元素
		a1.remove(2);
		
		//修改元素
		a1.set(2,"java007");
		
		//通过角标获取元素
		sop( "get(1):"+a1.get(1);)
		
		//获取所有元素:
		for(int x=0;x<a1.size();x++)
		{
			System.out.println("a1("+x+")"+a1.get(x));
		}
		
		Iterator it=new Iterator();
		
		while(it.hasNext())
		{
			sop("next:"+it.next());
		}
		
		//通过indexOf获取对象的位置
		sop("index="+a1.indexOf("java02"));
		
		List sub=a1.subList(1,3);
		
		sop("sub="+sub);
	}
	public static void main(String []args)
	{
		//演示迭代器
		ArrayList a1=new ArrayList();
		
		//添加元素
		a1.add("java01");
		a1.add("java02");
		a1.add("java03");
		
		sop(a1);
		
		ListIterator li=a1.listIterator();
		
		
		sop("hasPrevious():"+li.hasPrevious());
		
		while(li.hasNext())
		{
			Object obj=li.next();
			
			if(obj.equals("java02"));
				//li.add("java009");
				
				li.set("java006");
		}
		
		while(li.hasPrevious())
		{
			sop("pre:"+li.previous());
			sop("hasNext():"+li.hasNext());
			sop("hasPrevious():"+li.hasPrevious());
		}
		
		sop(a1);
		
		//在迭代过程中,准备添加或者删除元素
		
		Iterator it=new Iterator();
		
		while(it.hasNext())
		{
			//sop("next:"+it.next());
			Object obj=it.next();
			
			if(obj.equals("java02"))
				//a1.add("java008");
				it.remove();//将java02的引用从集合中删除了
				
			
			sop("obj="+obj);
		}
		sop(a1);
	}
}
以上是对ArrayList的操作,包括了ArrayList的一些基本操纵,如在指定位置添加元素:a1.add(1,"java09");。。。在指定位置删除元素:a1.remove(2);。。。修改指定位置的元素:a1.set(2,"java007");。。。通过角标获取元素:a1.get(1)。。。


LinkedList:

import java.util*;
class LinkListDemo
{
	public static void main(String []args)
	{
		LinkedList link=new LinkedList();
		
		link.addFirst("java01");
		link.addFirst("java02");
		link.addFirst("java03");
		link.addFirst("java04");
		
		//sop(link);
		//sop( link.getFirst());
		//sop( link.getLast());
		//sop(link.removeFirst());
		
		//sop("size="+link.size());
		
		//用迭代器取元素
		while(!link.isEmpty())
		{
			sop(link.removeFirst());
		}
		
	}
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}

linklist的特有方法
addFirst():在集合的首位添加元素
addLast():在集合的尾部添加元素


getFirst();获取集合首位的元素
getLast();获取集合尾部的元素
特点:获取元素但是不删除元素


removeFirst();获取集合首位的元素并且删除
removeLast();获取集合尾部的元素并且删除
特点:获取元素但是要删除元素,如果集合中没有元素,会出现NoSuchElementException


在JDK1.6出现了替代方法


offerFirst();
offerLast();


peekFirst();
peekLast();


pollFirst();
pollLast();


因为现在基本不使用Vector了,所以它的方法就不再讲解了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值