1. 泛型

1. 泛型

泛型是一种数据安全的做法,限制了集合中元素的类型

ArrayList<String> objects = new ArrayList<>();
/**
 * <E> 元素
 * <T>  类型
 * <K,V>  键值
 * <N,V>  名值
 * @param <E>
 */
public class MyArrayList<E> {
    public void add(E e){}
}

2. 泛型的应用(接口)

通用管理系统的接口(增删改查)

package com.wz.genericity_02;

public interface IManagerSystem<T> {
    public int add(T t);
    public int delete(T t);
    public int update(T t,int type,Object val);
    public T[] getAll();
    public T[] get(Object... params);
    public void expansion();
}

StudentManagerSystem 接口实现

package com.wz.genericity_02;

public class StudentManagerSystem implements IManagerSystem<Student>{
    @Override
    public int add(Student student) {
        return 0;
    }

    @Override
    public int delete(Student student) {
        return 0;
    }

    @Override
    public int update(Student student, int type, Object val) {
        return 0;
    }

    @Override
    public Student[] getAll() {
        return new Student[0];
    }

    @Override
    public Student[] get(Object... params) {
        return new Student[0];
    }

    @Override
    public void expansion() {

    }
}
package com.wz.genericity_02;

public class test01 {
    /**
     * 知识点:泛型的应用
     * 编写通用的管理系统的接口
     */
    public static void main(String[] args) {
        StudentManagerSystem stu = new StudentManagerSystem();
        stu.add(new Student());
    }
}

3. 泛型限定

public class B extends A {}
/**
     * 泛型限定
     */
    public static void main(String[] args) {

    }
    //? 表示任意类型
    public ArrayList<?> method01(){
        ArrayList<String> list = new ArrayList<>();
        return list;
    }
    //? extends A 表示A或A的子类
    public ArrayList<? extends A> method02(){
        //ArrayList<A> list = new ArrayList<>();
        ArrayList<B> list = new ArrayList<>();
        return list;
    }
    //? super A 表示A或A的父类
    public ArrayList<? super A> method03(){
        //ArrayList<A> list = new ArrayList<>();
        ArrayList<Object> list = new ArrayList<>();
        return list;
    }

2. 迭代器

1. foreach的底层实现

foreach的实现

package com.wz.iterator;

import java.util.ArrayList;

public class test02 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");
        list.add("E");
        for (String element:list
             ) {
            System.out.println(element);
        }
    }
}

底层

String next;
for(Iterator<String> iterator = list.iterator();iterator.hasNext;System.out.println(element)){
    element=iterator.next();
}

注意加泛型

2. Iterator底层实现

迭代器的实现

package com.wz.iterator;

import com.sun.javafx.binding.StringFormatter;

import java.util.ArrayList;
import java.util.Iterator;

public class test01 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");
        list.add("E");
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            String next = it.next();
            System.out.println(next);
        }

    }
}

底层

存在一个外部操作数modCount,在添加或者删除元素是会++(报错),记录操作的次数,因为在添加或删除过程中会导致元素个数发生改变