zoukankan      html  css  js  c++  java
  • java学习--基础知识进阶第六天--笔记

    今日内容
    Collection集合&迭代器
    增强for&泛型
    常见的数据结构
    List子体系

    集合的体系结构
    集合不是指某一个类,它是一个体系,其中包含了很多的类和接口

    单列集合(Collection)
    Collection
    |-List:有序(怎么存就怎么取)、可以存储重复元素、有整数索引
    |-ArrayList:底层是数组结构
    |-LinkedList:底层是链表结构
    |-Vector:底层是数组结构
    |-Set:无序(不能保证怎么存就怎么取),不能存储重复元素、没有整数索引
    |-HashSet
    双列集合(Map)

    学习的时候,从上往下学,因为最顶的接口或者类有共性的内容,学会了共性,下面具体的类的使用也就学会了
    使用的时候,从下往上使用,使用的时候需要使用具体的类

    Collection
    是单列集合的根接口
    常用方法
    boolean add(E e) : :添加元素
    void clear() :清空集合
    boolean contains(Object o) :判断是否包含
    boolean isEmpty() :判断集合是否为空
    boolean remove(Object o) :删除指定的元素
    int size() :集合的长度
    Object[] toArray() :将集合转为Object数组

    Iterator<E> iterator() :用于获取迭代器


    Iterator接口
    方法:
    boolean hasNext():判断集合中是否还有下一个元素
    E next():一次取一个元素,并返回
    void remove():删除元素

    ListIterator接口
    只针对于List子体系有效,不是所有的Collection集合都可用
    它是Iterator的子接口,有比父接口更强大的功能
    除了有父接口中的三个方法之外,还有其他的,比如:
    void add(E e) :添加



    并发修改异常:
    类名:ConCurrentModificationException
    发生的原因:
    在使用迭代器(Iterator)对集合进行遍历的同时,使用集合的方法修改(添加或删除)了集合中的元素,而迭代器不知道,就发生了该异常

    如何解决:
    (1)不使用
    (2)使用迭代器自身的方法,但是迭代器中的有删除的方法,没有添加的方法
    如果一定要在迭代器迭代的过程中添加元素,只能借助ListIterator
    遍历方式:
    方式一:普通for循环,结合get(int index)和size()方法【只适用List子体系】(因为普通for循环有索引)
    * 使用比较少
    // 创建集合
    ArrayList list = new ArrayList();
    // 添加元素
    list.add("a");
    list.add("b");
    list.add("c");

    // 遍历
    for(int i=0; i<list.size(); i++) {
    Object o = list.get(i);
    System.out.println(o);
    }

    方式二:普通for,结合toArray(),先将集合转为Object类型的数组,然后遍历数组就相当于遍历出了集合中的元素
    * 使用比较少
    // 创建集合
    Collection c = new ArrayList();
    // 添加元素
    c.add("a");
    c.add("b");
    c.add("c");

    // 遍历
    Object[] objs = c.toArray();
    for(int i=0; i<objs.length; i++){
    System.out.println(objs[i]);
    }

    方法三:迭代器遍历(Iterator)(可以删除元素,不能增加元素)
    * 重点,使用比较多
    // 创建集合
    Collection c = new ArrayList();
    // 添加元素
    c.add("a");
    c.add("b");
    c.add("c");

    // 获取迭代器
    Iterator it = c.iterator();

    // 循环遍历获取每一个元素, 每一次获取之前都需要进行判断集合中是否还有元素
    while(it.hasNext()){
    // 获取元素
    Object o = it.next();
    System.out.println(o);
    }

    方式四:列表迭代器遍历(ListIterator)【只适用List子体系】(ListIterator接口继承了List接口)
    // 创建集合
    ArrayList list = new ArrayList();
    // 添加元素
    list.add("a");
    list.add("b");
    list.add("c");

    // 获取列表迭代器
    ListIterator lit = list.listIterator();

    // 循环遍历
    while(lit.hasNext()){
    Object o = lit.next();
    System.out.println(o);
    }

    方式五:增强for
    * 重点,使用比较多
    // 创建集合
    Collection<String> c = new ArrayList<>();
    // 添加元素
    c.add("a");
    c.add("b");
    c.add("c");

    for(String s : c){
    System.out.println(s);
    }

    增强for&泛型
    都是JDK1.5的新特性,目前为止咱们总共学了3个JDK1.5的新特性:
    泛型
    自动拆装箱
    增强for

    泛型
    可以理解为规定了集合中所存储的数据的类型

    好处:
    (1)是一种安全机制,将运行时可能出现的错误提前到了编译时期解决
    (2)较少了强转的麻烦,简化了代码

    注意:
    (1)泛型<>中填写的内容是数据的类型,这个只能是引用数据类型,不能填写基本数据类型
    (2)泛型前后类型要一致,但是从JDK1.7之后,后面的泛型也可以不写,这是菱形泛型

    增强for(foreach)
    一般用于遍历集合或者数组

    格式:
    for(数据类型 元素名:集合或者数组){
    }

    快捷键:
    fore 然后按alt+/

    注意:增强for遍历的时候不能对集合进行删除或者添加元素的操作

    常见的数据结构
    数组
    查找快、增删慢
    链表
    查找慢、增删快

    先进后出
    队列
    先进先出

    List的子体系
    List接口的特有方法
    void add(int index,E element):在指定索引处添加元素
    E remove(int index):删除指定索引处的元素,并将被删除的元素返回
    E set(int index,E element):将指定索引处的元素修改为新的值,返回被修改的值
    E get(int index):根据指定索引处的元素

    LinkedList的特有功能:
    void addFirst(E e)
    void addLast(E e)
    E getFirst()
    E getLast()
    E removeFirst()
    E removeLast()

  • 相关阅读:
    时间戳与时间之间的相互转化
    源代码管理之Git命令的使用
    ios最新设置状态栏字体颜色总结
    iOS 代码方式设置按钮标题、图片的偏移
    runloop简单介绍
    iOS中的多线程NSThread/GCD/NSOperation & NSOperationQueue
    AFNetworking的详细解析
    MATLAB相关快捷键以及常用函数
    CentOS 5.8下快速搭建FTP服务器
    php获取跳转后的真实链接
  • 原文地址:https://www.cnblogs.com/bigorangehasc/p/8639404.html
Copyright © 2011-2022 走看看