黑马程序员——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的三大框架

如果做javaweb开发,spring是一定要学的,现在主流还是ssh,就是strurs+hibernate+spring,其中hibernate是持久层,用来持久化数据库操作的,如果不喜欢可以学点别...
  • Mr_April
  • Mr_April
  • 2015年07月03日 17:12
  • 1535

黑马程序员_学习笔记JAVA基础总结

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!------- 1、方法重载 方法覆盖 重载:一个类中一种功能的多种实现方式,调用哪种实现...
  • qq_27123965
  • qq_27123965
  • 2015年04月19日 14:39
  • 397

黑马程序员:Hibernate基础知识

android培训、java培训
  • u012159707
  • u012159707
  • 2013年09月26日 15:42
  • 585

黑马程序员_我的Linux基础整理笔记

Linux Linux文件目录和分区 文件目录: /:根目录 /root:存放root用户的相关文件 /home:存放普通用户的相关文件 /bin:存放普通用户的可执行命令 /sbin:...
  • zhengzhongjie1990
  • zhengzhongjie1990
  • 2014年07月05日 17:08
  • 1518

黑马学习笔记--JAVA基础知识

JAVA概述JAVA发展史: JAVA之父:詹姆斯.高斯林 SUN公司:斯坦福大学网络公司(2010-10-24被oracle收购) JDK JRE JVM: JDK: JAVA开发工具包,包含了JR...
  • qq_28114645
  • qq_28114645
  • 2017年03月07日 22:33
  • 322

黑马程序员--Struts2复习笔记

--------
  • li951418089
  • li951418089
  • 2015年12月24日 10:26
  • 252

黑马程序员_java多线程的一些总结(一)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、    进程和线程 1、   进程和线程的关系。 一般来说,我们运行一个应用程序的,就启动...
  • u011449569
  • u011449569
  • 2015年10月29日 00:23
  • 285

Hibernate框架笔记

Hibernate 课程内容: 1.   常见的O/R框架(了解) 2.   Hibernate基础配置(重点) 3.   ID生成策略(重点掌握auto) 4.   Hibernate ...
  • g_s007
  • g_s007
  • 2016年07月07日 15:39
  • 187

关于我在黑马程序员培训毕业后的亲身体验

首先申明:我本人已经于2016年5月份在广州传智播客java培训完毕业,和黑马程序员官网没有任何的利益往来,也没有人出钱给我帮他们做软文推广,这是我在黑马程序员的亲身体验,不存在虚构。...
  • wjycgl
  • wjycgl
  • 2017年04月20日 15:27
  • 1639

黑马程序员——Java基础测试题

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 黑马程序员——Java基础测试题 第1题:以下代码哪个是正确的?为什么?   a. byte...
  • liu007004
  • liu007004
  • 2015年01月16日 12:49
  • 1371
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员——Java笔记——集合框架1——list
举报原因:
原因补充:

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