2017-4-26:学习笔记(集合)

来源:互联网 发布:微信表白墙源码 编辑:程序博客网 时间:2024/06/11 16:37

集合


Collection

Collection是所有容器的顶层接口,包含容器中最共性的内容

  • 集合类关系图
    集合类关系图

集合类的方法

  • Collection coll = new ArrayList();
    • 接口的多态性调用
    • ArrayList是有序集合
  • boolean coll.add();
  • boolean coll.contians(Object obj);
    • 判断对象是否存在于集合中
    • 存在返回true
    • 不存在返回false
    • 集合存任意对象,因此参数为Object
  • void coll.clear();
    • 集合元素虽然被清空,但是集合本身仍然存在
  • boolean coll.remove(Object obj);
    • 删除集合中第一个符合条件的元素
    • 如果存在的话,移除集合中的单个实例
  • int coll.size();
    • 返回集合中元素的个数
  • Object [] = coll.toArray();
    • 返回包含此Collection中所有元素的数组

三种长度表示方式

  • 数组
    • .length
    • 数组专用
  • 字符串
    • .length()
  • 集合
    • .size()

迭代器

Iterator

必要性

  • 容器内部是不一样的
    • 存储的方式是不一样的
    • 取出的方式也是不一样的
  • 为了避免这种区别,Java制订了集合取出元素的标准
  • 作用就是遍历集合,屏蔽了集合间的不同

Iterator接口

  • 对Collection进行迭代的迭代器
  • 三个抽象方法
    • boolean hasNext()
    • E next()
    • void remove()

实现过程

  • 集合中的迭代器
    • 获取集合中元素方式
  • 接口 Iterator : 两个抽象方法
    • boolean hasNext() 判断集合中还有没有可以被取出的元素,如果有返回true
    • next() 取出集合中的下一个元素
  • Iterator接口,找实现类.
  • Collection接口定义方法
  • ArrayList 重写方法 iterator(),返回了Iterator接口的实现类的对象

    • 使用ArrayList集合的对象
    • Iterator it =array.iterator(),运行结果就是Iterator接口的实现类的对象
    • it是接口的实现类对象,调用方法 hasNext 和 next 集合元素迭代
  • 注意

    • 最开始的时候指针在 -1

集合迭代中的转型

  • 集合中元素类型不确定时
    • 迭代器的类型也就不确定
    • 此时迭代器调用next()方法返回的是Object类型数据
  • 这样进行数据转换时会抛异常
    • 因此在集合上需要加上泛型

增强for循环

  • 增强的for循环是JDK1.5之后才有的新特性
  • JDK1.5之后出现了新接口
    • 接口在java.lang.Iterable
    • Collection继承了上述的iterable接口
    • 这个接口的功能:允许实现这个接口的对象成为”foreach”的目标,也就是实现增强for循环
    • 增强for不仅可以循环集合,还可以循环数组

格式

for (数据类型 变量名:数组或集合) {    sop(变量);}
  • 举例
public static void function() {    int [] arr = {1, 3, 5, 6, 7, 9, 10};    for (int i : arr) {        System.out.println(i + 1);    }}
  • 上述代码的 i 先进入 0 索引中,然后 i = arr[0];

分析

  • 好处
    • 代码少
    • 方便对容器进行遍历
  • 弊端
    • 不能操作容器里面的元素(操作元素是要由索引的)

伪泛型

  • Java中的泛型是伪泛型
    • 只是一个编译的手段
    • 编译后的字节码文件没有泛型
    • 但是这样仍然能保证安全性

泛型的通配符 (?)

  • * 是系统中的通配符
  • 在遍历时想同时遍历两个集合
    • 定义方法,可以同时迭代两个集合
    • 参数
      • 不能写两种集合的任意一种
      • 写两个集合共同实现的接口
  • 泛型的通配可以匹配所有的泛型
import java.util.*;public class MyIterator {    public static void main(String[] args) {        List<String> list  = new ArrayList<String>();        Set<Integer> set = new HashSet<Integer>();        String [] string = {"aaa", "bbb", "ccc", "ddd"};        Integer [] integer = {1, 2, 3, 4, 5};        for (String poi : string) {            list.add(poi);        }        for (Integer poi : integer) {            set.add(poi);        }        Iterator(list);        Iterator(set);    }    private static void Iterator(Collection<?> collection)     {        Iterator<?> it = collection.iterator();        while (it.hasNext()) {            System.out.println(it.next());        }    }}
0 0