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

原创 2015年07月07日 23:19:03
------- 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());
		}
	}

}



相关文章推荐

黑马程序员_JAVA笔记14——集合框架(List、HashSet、TreeSet)

------- android培训、java培训、期待与您交流! ---------- 1、为什么出现集合类,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储...

黑马程序员——java基础拾遗之集合框架(一) List 和 Set

集合类:方便对多个对象进行操作,存储等。 和数组的区别 数组的长度固定,集合的长度可变,数组可以存储基本数据类型,集合只能存对象 数组存内容的类型必须相同,集合类可以存储不同类型的对象 ...

黑马程序员——JAVA基础----------集合框架(一)----list接口

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! —— 一、集合框架 在实际开发中,我们经常会对一组相同类型的数据进行统一管理操作。通常通过数组结构、链表结构、二叉树...

黑马程序员——高新技术---Java基础-集合框架-集合Collection,List

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------  1:对象数组(掌握) (1)数组既可以存储基本数据类型,也可以存储引用类型。...

黑马程序员——JAVA集合框架(1)

在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类)。所有抽象出来的数据结构和操作(算法)统称为Java集合框架(Java Collection ...

黑马程序员——Java学习笔记 集合框架(二)

class HashSetTest {     public static void sop(Object obj)      //打印方法     {         System.out.prin...

黑马程序员——Java学习笔记 集合框架(一)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

【黑马程序员】集合框架(上)——Java复习笔记

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-List的子类(1)ArrayList (2)Vector 特有功能 a:添加 ...

黑马程序员java学习笔记——集合框架

集合框架     概述     面向对象语言对事物的描述都是以对象的形式体现的,为了方便对多个对象的操作,就对对象进行存储,集合就是存处对象最常用的一种方式,数据多了用对象存,对象多了就用集合存。...

黑马程序员——JAVA笔记之集合框架(泛型、Map等)

集合框架(泛型、Map等) 面向对象语言对事物的体现都是以对象的形式,所有未来方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。 数组虽然也可以存储对象,但长度是固定的;集合...
  • yjsf216
  • yjsf216
  • 2015年03月15日 00:44
  • 354
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员——Java笔记——集合框架1——list
举报原因:
原因补充:

(最多只允许输入30个字)