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

2020-03-10  本文已影响0人  蹦蹦跶跶的起床啊

今日内容

Collection集合[重点]

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

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

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<String> it = coll.iterator();
        //  泛型指的是 迭代出 元素的数据类型
     while(it.hasNext()){ //判断是否有迭代元素
            String s = it.next();//获取迭代出的元素
            System.out.println(s);
        }

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

迭代器原理

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

增强for循环[重点]

for(数据类型  变量名:集合/数组){
    System.out.println(变量名);
}//遍历一次集合/数组, 取出一个元素赋值给变量名;

泛型

概述

使用泛型的好处

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

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

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

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

泛型类的定义

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);  
  }  
}

泛型接口的定义

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){
//表示任何引用类型的集合都可以作为形参传递
}

泛型的上下限[重点]

数据结构

介绍

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

常见的数据结构[重点]

栈结构


队列结构

数组结构

链表结构

树结构

红黑树查询效率很高

今日总结

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

猜你喜欢

热点阅读