美文网首页
3/10day07_Collection_迭代器_泛型_数据结构

3/10day07_Collection_迭代器_泛型_数据结构

作者: 蹦蹦跶跶的起床啊 | 来源:发表于2020-03-10 16:07 被阅读0次

今日内容

  • Collection集合
  • 迭代器
  • 泛型
  • 数据结构

Collection集合[重点]

集合的介绍,集合和数组的区别

  • 集合是数据的容器
  • 数组:
    数据类型[] 变量名 = new 数据类型[数组的长度]
    集合:
    ArrayList<数据类型> 变量名 = new ArrayList<数据类型>
  • 区别
    1.数组的长度是固定的,集合的长度是可以改变的
    2.数组中的元素类型可以是基本类型或引用类型. 集合的元素类型必须是引用类型或包装类

集合常用类的继承体系[重要]

  • 两类集合接口特点
    List 的特点是元素有索引,有序,元素可重复
    Set 的特点是无索引,无序,元素不可重复。



Collection 中的通用方法

public    boolean    add(E e);  添加元素,返回值表示添加成功
public    boolean    remove(E e);  删除元素, 返回值表示是否删除成功
  • 改(无)
 因为List接口有索引和Set接口无索引. 所以根接口无改方法
  • 查(无)
根接口中没有
  • 其他
public   boolean  contais(object  obj);判断集合中是否包含某个元素

public  void  clear(); 清空集合(把集合中元素全部删除, 不是把集合置为null)

public  boolean isEmpty();判断集合是否为空

public  int size();返回集合中的元素个数

public  Object[]  toArray();将集合转为数组

Iterator迭代器[重点]

集合迭代器的介绍和使用

(因为set接口的实现类集合无索引, 没有办法使用fori来遍历)

  • 迭代器: 用来遍历集合的对象(遍历集合不需要索引),就是Iterator
  • 迭代:即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续再判断,如果还有就再取出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
  • 使用步骤:
    1.创建Iterator对象(使用集合对象.iterator()的方法, 这个方法写在Collection中返回一个迭代器对象)
    2.使用调用对象.hasNext()方法(是否有元素, 有返回true)
    3.使用调用对象.next()方法
     Iterator<String> it = coll.iterator();
        //  泛型指的是 迭代出 元素的数据类型
     while(it.hasNext()){ //判断是否有迭代元素
            String s = it.next();//获取迭代出的元素
            System.out.println(s);
        }
  • 迭代器的注意事项(两个异常)
    1.NoSuchElementException; 没有元素异常
    出现原因:没有元素了,还是用迭代器的next()方法, 就会出现异常
    2.ConcurrentModificationException; 并发修改异常
    出现原因: Java迭代器规定, 在使用迭代器过程中,无法使用增删元素(无法更改集合长度)
    但是可以使用迭代器本身的 remove方法是可以删除的(迭代器本身没有增加方法)

注意:
1.使用迭代器时,必须先使用hasNext方法判断,且结果为true,才能调用next方法
2.使用迭代器时,尽量只做遍历,不允许在使用过程中,用了增加或删除元素的操作
3.迭代器遍历一次之后,就结束了,再使用的时候需要重新使用 list.iterator() 获取新的迭代器

迭代器原理

迭代器底层使用了"指针原理"

增强for循环[重点]

  • 什么是增强for循环
    实际上是一种简便格式(语法糖).内部原理是迭代器的简便格式

  • 使用方法

for(数据类型  变量名:集合/数组){
    System.out.println(变量名);
}//遍历一次集合/数组, 取出一个元素赋值给变量名;
  • 注意事项:
    1.增强for循环必须有被遍历的目标,目标只能是Collection或者是数组;
    2.增强for(迭代器)仅仅作为遍历操作出现,不能对集合进行增删元素操作,否则抛出ConcurrentModificationException并发修改异常

泛型

概述

  • 是jdk1.5之后的新特性
  • 什么是泛型:
    是一种不确定的类型,程序员使用时再确定下来
  • 泛型的格式
    <E>
    <K,V>

使用泛型的好处

  • 将运行时期的ClassCastException,转移到了编译时期变成了编译失败。
  • 避免了类型强转的麻烦。

泛型是数据类型的一部分,我们将类名与泛型合并一起看做数据类型。

如何定义和使用泛型[理解]

泛型可以定义在类上,方法上,接口上
泛型在定义的时候不具体,使用的时候才变得具体。在使用的时候确定泛型的具体数据类型。

定义不具体,使用的时候具体

  • 泛型类(泛型定义在类上)
    在创建对象的时候确定类型

泛型类的定义

class ArrayList<E>{ 
    public boolean add(E e){ }
    public E get(int index){ }
    ....
}

泛型类的使用

ArrayList<String> list = new ArrayList<String>();
  • 泛型方法(泛型定义在方法上)

泛型方法的定义

public <MVP> void show(MVP mvp) {
        System.out.println(mvp.getClass());
    }

泛型方法的使用

public class Dog{
    public <E> void show(E num){
        System.out.println(num);
  }
}
public class TestDog{
  public static void main(){
    Dog dd= new Dog();
    dd.show("Java");
    dd.show(10);
    dd.show(10.33);  
  }  
}
  • 泛型接口(定义在接口上)
    1.在实现类中实现该接口时,确定具体类型
    2.在实现类中实现该接口时,保留泛型相当于继承父类泛型

泛型接口的定义

public interface MyGenericInterface<E>{
    public abstract void add(E e);
    
    public abstract E getE();  
}

泛型接口的使用

1.定义类时确定泛型的类型

public class MyImp1 implements MyGenericInterface<String> {
    @Override
    public void add(String e) {
        // 省略...
    }
 
    @Override
    public String getE() {
        return null;
    }
}

2.始终不确定泛型的类型,直到创建对象时,确定泛型的类型

定义泛型
public class MyImp2<E> implements MyGenericInterface<E> {
    @Override
    public void add(E e) {
         // 省略...
    }
 
    @Override
    public E getE() {
        return null;
    }
}
确定泛型:
/*
 * 使用
 */
public class GenericInterface {
    public static void main(String[] args) {
        MyImp2<String>  my = new MyImp2<String>();  
        my.add("aa");
    }
}

小结:泛型是一种未知的数据类型,定义在类上的泛型,使用类的时候会确定泛型的类型,定义在方法上的泛型,会在使用方法的时候确定泛型,定义在接口上的泛型,需要使用接口的时候确定泛型。

泛型的通配符

当使用泛型类或者接口时,传递的数据中,泛型类型不确定,可以通过通配符<?>表示。但是一旦使用泛型的通配符后,只能使用Object类中的共性方法,集合中元素自身方法无法使用。

 void method(ArrayList<?> arr){
//表示任何引用类型的集合都可以作为形参传递
}

泛型的上下限[重点]

  • <?> 什么泛型都可以
  • <? extent Animal>,是泛型的上限,表示该泛型必须是Animal本类或其子类
  • <? super Student>,叫做泛型的下限, 表示该泛型必须是Student本类或者其父类

数据结构

介绍

是容器保存数据的方式(数据用什么样的方式组合在一起)

常见的数据结构[重点]

栈结构

  • 介绍
    又称堆栈,它是运算受限的线性表

  • 理解
    栈结构可以看做只有一端开口的容器
    1.压栈:就是存元素。即,把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置。
    2.弹栈:就是取元素。即,把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置。

  • 特点:
    1.先进后出
    2.栈的入口、出口的都是栈的顶端位置。


队列结构

  • 介绍
    简称队,它同堆栈一样,也是一种运算受限的线性表

  • 理解
    队列结构可以看做是 两端都有开口的容器(一端进一端出)

  • 特点
    1.先进先出(即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素)。例如,小火车过山洞,车头先进去,车尾后进去;车头先出来,车尾后出来。
    2.队列的入口、出口各占一侧。

数组结构

  • 介绍
    数组:Array,是有序的元素序列,数组是在内存中开辟一段连续的空间,并在此空间存放元素。就像是一排出租屋,有100个房间,从001到100每个房间都有固定编号,通过编号就可以快速找到租房子的人。
  • 特点:
    1.查找元素快:通过索引,可以快速访问指定位置的元素
    2.增删元素慢

链表结构

  • 介绍
    在链表结构中,每一个元素成为节/结点(Node)
    每个节点至少有两部分内容,一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
  • 特点
    链表结构在内存中可以是分散的
    1.多个结点之间,通过地址进行连接。
    2.查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素。
    3.增删元素快:


树结构

红黑树查询效率很高

今日总结

1.Collection 集合根接口【重点】
    i.集合继承体系
    ii. Collection中定义的通用方法
    iii.明白集合和数组的区别
    
2.迭代器【重点】
    i.迭代器使用的三个步骤: 获取迭代器,判断有没有下一个,取出下一个元素
    ii.增强for循环使用(底层使用就是迭代器)   
    iii.迭代器和增强for使用过程 不能增删元素   
        
3.泛型【理解】
    i.泛型怎么写 <E>
    ii.泛型类,泛型接口,泛型方法怎么定义和使用
    iii.泛型通配符以及上下限【重点】
        <?> 代表任意泛型均可
        <? extends 类名> 上限
        <? super 类名> 下限
4.数据结构【重点】
    栈结构: 先进后出
    队列结构: 先进先出
    数组结构: 增删慢,查询快
    链表结构: 增删快,查询慢
    红黑树: 查询效率非常恐怖!!  【记住结论即可】  

相关文章

  • 3/10day07_Collection_迭代器_泛型_数据结构

    今日内容 Collection集合 迭代器 泛型 数据结构 Collection集合[重点] 集合的介绍,集合和数...

  • lua学习之迭代器与泛型 for 第三篇

    迭代器与泛型 for 3 具有复杂状态的迭代器 使用 closure 可以保存迭代器所需保存的所有状态 也可以将迭...

  • Collection、泛型

    【Collection、泛型】 主要内容 Collection集合 迭代器 增强for 泛型 Collection...

  • c++学习记录8(GeekBand)

    这周的课讲了将泛型算法。现在将泛型算法收集下,备用。 (1)泛型算法用迭代器来解决第一个要求:遍历容器。所有迭代器...

  • Programming Assignment 2: Deques

    实现一个泛型的双端队列和随机化队列,用数组和链表的方式实现基本数据结构,主要介绍了泛型和迭代器。 Dequeue....

  • Java-泛型

    day02【Collection、泛型】 主要内容 Collection集合 迭代器 增强for 泛型 教学目标 ...

  • 2019-10-30

    day02【Collection、泛型】 主要内容 Collection集合 迭代器 增强for 泛型 教学目标 ...

  • day02【Collection、泛型】

    day02【Collection、泛型】 主要内容 Collection集合 迭代器 增强for 泛型 教学目标 ...

  • DAY15

    迭代器。iterator 泛型 Map映射 遍历映射 断言

  • 007-集合,list,set,map

    集合的概念 Collection集合 常用方法 迭代器 迭代器使用 迭代器的问题 泛型 代码演示: ArrayLi...

网友评论

      本文标题:3/10day07_Collection_迭代器_泛型_数据结构

      本文链接:https://www.haomeiwen.com/subject/qayidhtx.html