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开发------期待与您交流