集合总结-01-----黑马程序员

本文探讨了ASP.Net、Android和iOS开发领域的集合框架,包括集合概述、数组与集合的区别、List集合及其实现类ArrayList和LinkedList,以及如何使用Iterator进行元素的迭代。此外,还介绍了Vector作为集合框架之前的存储方式,并通过实践代码展示了如何实现堆栈和队列功能。

ASP.Net+Android+IOS开发------期待与您交流

 

<集合框架>

<集合框架--集合的体系及其概述>

 

在描述之前我们先来看看集合框架:

集合概述:

  生活中,会有很多容器,酒瓶子,饮料,茶具

  酒瓶子: 白酒,啤酒,红酒,黄酒

  饮料: 脉动,拿铁,咖啡

  茶具: 茶叶,水

 容器的共同点:存储

 容器的不同点:存储方式不一样,取出方式也不一样

 java中的容器,集合就是一种容器,数组

 集合的存储特点,取出特点,java将集合分成了两大派系

 集合框架:存储,和获取

 集合和数组的区别

   |-- 数组可以存储基本数据类型,可以存储对象

   |-- 集合,只存储对象,不存储基本数据类型

   |-- 数组的长度是固定的

   |-- 集合的长度是可变的

   |-- 数组中提供了微乎其微的方法

   |-- 集合提供了大量的方法,来操作集合

1. Collection 集合的顶层接口

  |-- add(对象) 向集合中存储对象,add()方法的参数设计是Object

  |-- int size() 返回集合中元素的个数

  |-- clear() 清空集合中的元素

  |-- boolean contains(Object) 比较对象是否在集合中,在就返回真

  |-- boolean remove(Object) 删除集合中的元素,删除成功返回真

  |-- addAll(Collection ) 添加一批元素,将一个集合中的元素,添加到另一集合

  |-- boolean containsAll(Collection )判断一个集合是否在另一个集合中,全部的元素

  |-- boolean removeAll(Collection )删除两个集合相同的元素

  |-- boolean retainAll(Collection )获取交集,存储两个集合中相同的元素,元集合不变时返回false

2. 取出结合中的元素,取出方式有一个通用的方法,就是迭代器

   迭代器是取出集合中元素的方法   必须要会****************

   Iterator  iterator()

     |-- boolean hasNext() 判断集合中是否有下一元素

     |-- Object next() 返回集合中的下一个元素

     |-- remove() 移除集合中的元素

使用Iterator取出元素:

package cn.itcast.collection;
import java.util.*;
public class IteratorDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Collection col = new ArrayList();
		col.add("abedfc1");//Object obj = new String("abc");
		col.add("abcasdasdasd2");
		col.add("abwesrytrewehtrwqec3");
		/*
		 * 使用迭代器,取出集合中元素的步骤
		 *  1. 通过集合自己的方法 iterator返回迭代器对象
		 *  2. 建立循环 while  for
		 *    条件是什么,就是迭代器的hasNext()方法
		 *  3. 调用迭代器的next()方法,返回集合中的下一个元素
		 */
//		System.out.println(col);
		Iterator it = col.iterator();
		for(;it.hasNext();){
			System.out.println("for====="+it.next());
		}
		//Iterator it = col.iterator();
		while(it.hasNext()){
			//String s = (String)it.next();
			//System.out.println(s.length());
			System.out.println("while====="+it.next());
		}
	}

}


 

3. 集合中,存储自定义对象

   |-- 强制类型转换,存储的时候,已经将对象提示为了Object类型

   |-- next()方法,只能出现一次

4. List集合

  |-- 这是一个有序集合(存储的顺序和取出的顺序是一致的)

  |-- 这个集合中的存储的元素,可以重复

  |-- 这个集合中的存储的元素,都有索引

  |-- List集合中的特有方法

  |-- Object get(int index)可以根据元素的索引,获取集合中的元素,支持for循环,就像是遍历数组一样

  |-- add(int index ,Object o)指定的位置上插入元素

  |-- addAll(int index, Collection  c)  

  |-- remover(int index) 按照索引,删除集合中的元素,返回被删除掉的元素

  |-- subList(start end) 获取集合中的一部分,包含头不包含尾,返回新集合

5. ListIterator -- List特有迭代器,Set Map不具备

  |-- 通过List集合返回这个特有迭代器,listIterator

  |-- 迭代集合的过程中,使用这个特有迭代器,可以对集合进行增,删,改的操作,不会出现异常

  |-- add()  添加元素

  |-- remove()移除元素

  |-- set()修改元素

  |-- 反向迭代集合hasPrevious()==hasNext()    previous() == next() ,现正向,在反向

 6. ArrayList--使用频率很高的一个类

  |-- 这个集合,是List派系,具有Collection和List中的全部内容

  |-- 这个集合,底层数据结构是数组结构,可变数据结构

  |-- 每次50%递增,特点的查询快,增删慢

  |-- 线程不安全,执行效率高

ArrayList的使用:

package cn.itcast.collection;
/*
 * 集合中的根接口Collection中的方法
 * 接口不能建立对象,找子类去
 */
import java.util.*;
public class CollectionDemo {

	public static void main(String[] args) {
		method_2();
		//
	}
	/*
	 * Collection中的remove()方法
	 */
	private static void method_2(){
		Collection col = new ArrayList();
		col.add("abc1");
		col.add("abc2");
		col.add("abc3");
		col.add("abc4");
		System.out.println("原始集合==="+col);
		boolean b = col.remove("abc");
		System.out.println("b="+b);
		System.out.println("删除后的集合==="+col);
	}
	
	
	/*
	 * Collection中的contains方法
	 * 判断集合是是否有这个元素,返回值是 boolean
	 */
	private static void method_1(){
		Collection col = new ArrayList();
		col.add("abc1");
		col.add("abc2");
		col.add("abc3");
		col.add("abc4");
		boolean b = col.contains("aBc2");
		System.out.println("b="+b);
		
		b = !!col.isEmpty();
		System.out.println("b="+b);
	}
	
	
	
	
	private static void method(){
		//接口引用,指向自己的实现类对象,多态
				Collection col = new ArrayList();//建立了一个集合容器
				/*集合中只存储对象,不存储基本数据类型
				boolean add(E e)
				add()方法在java工程师们,设计的时候,会知道后期我们存储什么对象吗
				所以add(Object)方法的参数,Object
				*/
				col.add("abc1");
				col.add("abc2");
				col.add("abc3");
				col.add("abc4");
				System.out.println(col);//只是为了演示,实际开发不能用  [abc1, abc2, abc3, abc4]
				//打印语句中,默认调用对象的toString()方法,覆盖Object中的toString()
				int size = col.size();
				System.out.println(size);
				col.clear();
				System.out.println(col);
				/*
				 * add()
				 * size()
				 * 运行的是Collection中的,还是ArrayList中的
				 */
	}

}


 

 7. LinkedList-- 链表

  |-- 这个集合,是List派系,具有Collection和List中的全部内容

  |-- 这个集合,底层数据结构是链表结构

  |-- 特点:查询慢,增删块

  |-- LinkedList 线程不安全,执行效率高

  |-- LinkedList中的特有方法

    |-- addFirst()元素插入开头

    |-- addLast() 元素插入在结尾

    |-- E getFirst() 返回此列表的第一个元素。 

    |-- E getLast()  返回此列表的最后一个元素

    |-- E removeFirst() 移除并返回此列表的第一个元素。 

    |-- E removeLast() 移除并返回此列表的最后一个元素。 

 8. Vector  线程安全执行效率低不常用

  |-- 出现在集合框架之前,

  |-- 从1.2开始,实现List接口

  |-- 在没有集合框架之前,在java语言中,存储对象只能依靠Vector

  |-- 底层结构也是数组结构,但是他的扩展率100%

  |-- 线程安全,执行效率低

 9. LinkedList练习 *****

  |-- 实现堆栈队列

  |-- 堆栈:

     数据的先进后出

  |-- 队列

     数据的先进先出

代码的实现:

package cn.itcast.collection;
/*
 * 实现数据的堆栈,队列
 * 定义工具类,实现数据的出入功能
 *  1. 定义LinkedList引用
 *  2. 构造方法中,创建LinkedList对象
 */

import java.util.*;

class DuiZhanDuiLie{
	private LinkedList list = null;
	DuiZhanDuiLie(){
		list = new LinkedList();
	}
	//定义存储对象的方法
	public void add(Object obj){
		list.add(obj);
	}
	//定义获取对象的方法
	public Object get(boolean x){
		if(x)
		return list.removeFirst();
		else
		return list.removeLast();
	}
	
	//定义判断集合中是否为空的方法
	public boolean isEmpty(){
		return !list.isEmpty();
	}
}


public class LinkedListTest {
	public static void main(String[] args) {
		DuiZhanDuiLie dl = new DuiZhanDuiLie();
		dl.add("abc1");
		dl.add("abc2");
		dl.add("abc3");
		dl.add("abc4");
		while(dl.isEmpty()){
		System.out.println(dl.get(false));
		}
	}

}


 

ASP.Net+Android+IOS开发------期待与您交流

 详细请查看:http://edu.youkuaiyun.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值