关闭

黑马程序员——Java笔记——集合框架1——list

标签: java黑马程序员
145人阅读 评论(0) 收藏 举报
分类:
------- android培训java培训、期待与您交流! ----------

集合框架的特点:

1:对象封装数据,对象多了也需要存储。集合用于存储对象。

2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合。因为集合是可变长度的。


Collection
|--List:元素是有序的,元素可以重复。因为该集合体系有索引。
|--ArrayList: 底层使用的是数组数据结构。 特点:查询速度快,但是增删稍慢。线程不同步。
|--LinkedList:底层使用的是链表数据结构。 特点:增删速度很快,查询稍慢。
|--vector: 底层使用的是数组数据结构。 线程同步,被ArrayList替代。
|--Set:元素是无序的,元素不可以重复,该集合中没有索引。


Collection中的方法:

1、添加:

add(object):添加一个元素

addAll(Collection) :添加一个集合中的所有元素。

2、删除:

clear():将集合中的元素全删除,清空集合。

remove(obj) :删除集合中指定的对象。

removeAll(collection) :删除部分元素。部分元素和传入Collection一致。

3、判断:

boolean contains(obj) :集合中是否包含指定元素 。

boolean containsAll(Collection) :集合中是否包含指定的多个元素。

boolean isEmpty():集合中是否有元素。 

4、获取:

int size():集合中有几个元素。

5、取交集:

boolean  retainAll(Collection) :对当前集合中保留和指定集合中的相同的元素。如果两个集合元素相同,返回flase;如果retainAll修改了当前集合,返回true。

6、获取集合中所有元素:

Iterator  iterator():迭代器

7、将集合变成数组:

toArray();

class Demo
{
	public static void main(String[] args)
	{
		method_get();
	}
	
	public static void method_get()
	{
		ArrayList al=new ArrayList();
		al.add("java01");
		al.add("java02");
		al.add("java03");
		al.add("java04");
		
		/*
		Iterator it=al.iterator();//获取迭代器,用于取出集合中的元素。
		while(it.hasNext())
		{
			System.out.println(it.next());
		}
		*/
		for(Iterator it=al.iterator();it.hasNext();)
		{
			System.out.println(it.next());
		}
	}
	
	public static void base_method_2()
	{
		ArrayList al1=new ArrayList();
		al1.add("java01");
		al1.add("java02");
		al1.add("java03");
		al1.add("java04");
		
		ArrayList al2=new ArrayList();
		al2.add("java01");
		al2.add("java02");
		al2.add("java05");
		al2.add("java06");
		
//		al1.retainAll(al2);//取交集,al1中只会保留和al2中相同的元素。
		al1.removeAll(al2);//删除al1中与al2共有的元素。
		System.out.println("al1:"+al1);
		System.out.println("al2:"+al2);
	}
	
	public static void base_mathod()
	{
		//创建一个集合容器。使用Collection借口的子类。ArrayList
		ArrayList al=new ArrayList();
		//1.添加元素。
		al.add("java01");//add(Object obj);
		al.add("java02");
		al.add("java03");
		al.add("java04");
		//打印集合
		System.out.println(al);
		//2.获取个数。集合长度。
		System.out.println("size="+al.size());
		//3.删除元素
//		al.remove("java02");
//		al.clear();//清空集合
//		System.out.println(al);
		//4.判断元素
		System.out.println("java03是否存在:"+al.contains("java03"));
		System.out.println("集合是否为空:"+al.isEmpty());	
	}
}


List:特有方法,凡是可以操作角标的方法都是该体系特有的方法。

增:
add(index,element);
addAll(index,Collection);
删:
remove(index);
改:
set(index,element);
查:
get(index);
subList(from,to);
listIterator();


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

class Demo
{
	public static void main(String[] args)
	{
		//演示列表迭代器
		ArrayList al=new ArrayList();
		al.add("java01");
		al.add("java02");
		al.add("java03");
		
		System.out.println(al);
		ListIterator li=al.listIterator();
		System.out.println("hasPrevious():"+li.hasPrevious());
		for(;li.hasNext();)
		{
			Object obj=li.next();
			if(obj.equals("java02"))
			{
//				li.add("java009");
				li.set("java006");
			}
		}
		System.out.println("hasNext():"+li.hasNext());
		System.out.println("hasPrevious():"+li.hasPrevious());
		System.out.println(al);
		//逆向遍历
		while(li.hasPrevious())
		{
			System.out.println(li.previous());
		}
		
		
		/*
		//在跌代过程中,准备添加或者删除元素。
		for(Iterator it=al.listIterator();it.hasNext();)
		{
			Object obj=it.next();
			if(obj.equals("java02"))
			{
//				al.add("java008");
				it.remove();//将java02的引用从集合中删除
			}
			System.out.println(obj);
		}
		System.out.println(al);
		*/
		
		
	}
	
	public static void method()
	{
		ArrayList al=new ArrayList();
		//添加元素
		al.add("java01");
		al.add("java02");
		al.add("java03");
		System.out.println(al);
		
		//在指定位置添加元素
		al.add(1,"java09");
		System.out.println(al);
		
		//删除指定位置元素
//		al.remove(2);
//		System.out.println(al);
		
		//修改元素
//		al.set(2,"java007");
//		System.out.println(al);
		
		//通过角标获取元素
//		System.out.println(al.get(1));
		
		//获取所有元素
//		for(int x=0;x<al.size();x++)
//		{
//			System.out.println("al["+x+"]="+al.get(x));
//		}
		
		
//		for(Iterator it=al.listIterator();it.hasNext();)
//		{
//			System.out.println(it.next());
//		}
		
		//通过indexOf获取对象位置
		System.out.println("java02的index="+al.indexOf("java02"));
		
		//截取List
		List sub=al.subList(1,3);
		System.out.println("sub="+sub);
	}
	
}


LinkedList:特有方法:
addFirst();
addLast();

getFirst();
getLast();
获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException

removeFirst();
removeLast();
获取元素,但元素被删除。如果集合中没有元素,会出现NoSuchElementException

在JDK1.6中出现了替代方法
offerFirst();
offerLast();

peekFirst();
peekLast();
获取元素,但不删除元素。如果集合中没有元素,会返回null

pollFirst();
pollLast();
获取元素,但元素被删除。如果集合中没有元素,会返回null

练习:

使用LinkedList模拟一个堆栈或者队列数据结构
堆栈:先进后出 如同一个杯子。
队列:先进先出 如同一个水管。First in First out (FIFO)

class Demo
{
	public static void main(String[] args)
	{
		DuiLie dl=new DuiLie();
		dl.myAdd("java01");
		dl.myAdd("java02");
		dl.myAdd("java03");
		dl.myAdd("java04");
		
		while(!dl.isNull())
		{
			System.out.println(dl.myGet());
		}
	}

}

class DuiLie
{
	private LinkedList link=null;
	
	DuiLie()
	{
		link=new LinkedList();
	}
	
	public void myAdd(Object obj)
	{
//		link.addFirst(obj);
		link.offerFirst(obj);
	}
	
	public Object myGet()
	{
//		return link.removeLast();//队列
//		return link.removeFirst();//堆栈
		return link.pollLast();//队列
//		return link.pollFirst();//堆栈
	}
	
	public Boolean isNull()
	{
		return link.isEmpty();
	}
}

枚举就是vector特有的取出方式。
发现枚举和迭代器很像,其实枚举和跌代是一样的。

因为枚举的名称以及方法的名称都过长。
所以被迭代器取代了。
class Demo
{
	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.nextElement());
		}
	}

}



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3515次
    • 积分:266
    • 等级:
    • 排名:千里之外
    • 原创:24篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章分类
    文章存档
    最新评论