深入Collection集合的子接口List

今天来理顺一下Java里面的Collection集合以及里面的子集合,请看下面这张图片:


Collectio集合有两个子接口:List和Set

List的特点:元素是有序的,元素可以重复,因为该集合体系有索引

Set的特点:元素是无序的,元素不能重复

List集合底下的三个子接口;

ArrayList:底层使用的是数组结构,特点:查询速度很快,还有修改,但是增删稍慢,线程不同步

LinkedList:底层使用的是链表结构 特点:增删速度很快,查询速度稍慢

Vector:底层是数组数据结构,线程同步,无论增删,还是查询效率都慢,被ArrayList取代了


先来说一下List集合的公共方法:

增:add(index,element);

删:remove(index);

改:set(index,element);

查:get(index); && subList(from,to); && listIterator();

其中listIterator是List特有的迭代器,ListIterator是Iterator的子接口。在迭代时,不能通过集合对象的方法操作集合中的元素,因为会产生ConcurrentModificationException异常,所以在迭代时只能用迭代器的方法去操作元素,可是Iterator的方法是有限的,只能进行元素的查询,删除,判断操作,如果想要 其他的操作。如添加,修改,就需要使用其子接口:ListIterator。该接口只能通过List集合的listIterator方法获取。

分别说一下三个子接口:

ArrayList接口的相关代码:

import java.util.*;
public class Test01{
	public static void main(String[] args){
		method_get();
	}
	
	public static void sop(Object obj){
		System.out.println(obj);
	}
	
	public static void base_method(){
		ArrayList a = new ArrayList();
		
		//添加
		a.add("a");
		a.add("b");
		a.add("c");
		a.add("d");
		
		//获取元素个数
		sop(a.size());
		
		//打印集合
		sop(a);
		
		//删除元素
		a.remove("a");
		sop(a);
		
		//判断元素
		sop(a.contains("b"));
		
		//清空集合
		//a.clear();
		
		
		//集合是否为空
		sop(a.isEmpty());
	}
	
	public static void method_2(){
		ArrayList a1 = new ArrayList();
		
		a1.add("1");
		a1.add("2");
		a1.add("3");
		a1.add("4");
		
		ArrayList a2 = new ArrayList();
		
		a2.add("3");
		a2.add("4");
		a2.add("5");
		a2.add("6");
		
		//a1.retainAll(a2);//取交集
		a1.removeAll(a2);//去掉和a2中相同的元素
	
		sop(a1);
		sop(a2);
	}  
	
	/*
		什么是迭代器:
			是用于取出集合中元素的一种方式
	*/
	public static void method_get(){
		ArrayList a1 = new ArrayList();
		
		a1.add("java01");
		a1.add("java02");
		a1.add("java03");
		a1.add("java04");
		
		Iterator it = a1.iterator();//获取迭代器,用于取出集合中的元素
		/*
		sop(it.hasNext());//有元素返回的是true,没有元素返回的是false
		sop(it.next());
		sop(it.next());
		sop(it.next());
		sop(it.next());
		*/
		while(it.hasNext()){
			sop(it.next());
		}
	}
}

LinkedList接口的相关代码:

/*
	使用linkedlist模拟一个堆栈和队列的数据结构
	
	堆栈:先进先出,如同一个杯子
	队列:先进后出,如同一个水管
*/
import java.util.*;
public class linkedlist2{
	public static void main(String[] args){
		DuiLie li = new DuiLie();
		li.myAdd("java01");
		li.myAdd("java02");
		li.myAdd("java03");
		li.myAdd("java04");
		
		while(!li.isNull()){
			System.out.println(li.myGet());
		}
	}
}

class DuiLie{
	private LinkedList link;
	public DuiLie(){//一初始化就创建对象
		link = new LinkedList();
	}
	
	public void myAdd(Object obj){
		link.addFirst(obj);
	}
	
	public Object myGet(){
		return link.removeFirst();
	}
	
	public boolean isNull(){
		return link.isEmpty();
	}
}

Vector的相关代码:

import java.util.*;
/*
	枚举就是Vector特有取出方式
	
	发现枚举和迭代器很像:其实枚举和迭代是一样的
	因为枚举的名称和其方法的名称都过长了,所以被迭代给取代了
*/
public class Vector{
	public static void main(String[] args){
		Vector v = new Vector();
		
		v.add("java01");
		v.add("java02");
		v.add("java03");
		v.add("java04");
		
		Enumeration en = v.elements();
		while(en.hasMoreElements()){
			System.out.println(en.nextElements());
		}
	}	
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值