首页 > 其他分享 >2023年6月6日,泛型,迭代器

2023年6月6日,泛型,迭代器

时间:2023-06-06 23:36:33浏览次数:39  
标签:return 迭代 ArrayList list add 2023 泛型 new public

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,在添加或者删除元素是会++(报错),记录操作的次数,因为在添加或删除过程中会导致元素个数发生改变

标签:return,迭代,ArrayList,list,add,2023,泛型,new,public
From: https://blog.51cto.com/u_15098423/6428605

相关文章

  • 2023-6-6
    昨天喝了很多酒,混了好几种酒喝,然后今天直接脑袋大爆炸,又咳嗽。今天深刻明白了酒精会对我身体和脑袋会造成多大的损害,特别是当时喝完酒,突然自己开始打冷颤了,我觉得是我对酒精过敏了?然后被风吹一下,后来我吃了螺狮粉还拿了瓶冰矿泉水灌,估计是这一套操作下来直接把喉咙弄发炎了,今天......
  • 如何在2023年开启React项目
    在这里,我想给你一个新的React项目入门的简要概述。我想反思一下优点和缺点,反思一下作为一个开发者所需要的技术水平,反思一下作为一个React开发者,每个启动项目都能为你提供哪些功能。最后,你将了解到针对不同需求的3种解决方案。免责声明:从个人开发者的角度来看,我完全支持React团队......
  • 2023.6.6
    stoi函数作用是将n进制的字符串转化为十进制,使用时包含头文件string.定义如下:intstoi(conststd::string&str,std::size_t*pos=nullptr,intbase=10);参数:str-待转换的字符pos-其取值可以是一个空字符,在这种情况下,pos未被使用;另外如果pos不是空指针,函数将pos......
  • 2023-06-06:给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列。 对位
    2023-06-06:给你二叉树的根结点root,请你设计算法计算二叉树的垂序遍历序列。对位于(row,col)的每个结点而言,其左右子结点分别位于(row+1,col-1)和(row+1,col+1)树的根结点位于(0,0)。二叉树的垂序遍历从最左边的列开始直到最右边的列结束,按列索引每一列上......
  • 助力数字化转型,巨杉数据库荣获2023年中国最佳信创厂商殊荣
    巨杉数据库以其先进的技术和卓越的产品性能,荣获中国最佳信创数据库厂商,不仅证明了巨杉数据库在技术创新方面的积累与突破,更证明了巨杉数据库在推动数字化转型方面的成果。日前,第一新声联合天眼查发布2023年中国最佳信创厂商系列榜单,作为中国自研独立分布式厂商,巨杉数据库以其先进......
  • 2023-06-06:给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列。 对位
    2023-06-06:给你二叉树的根结点root,请你设计算法计算二叉树的垂序遍历序列。对位于(row,col)的每个结点而言,其左右子结点分别位于(row+1,col-1)和(row+1,col+1)树的根结点位于(0,0)。二叉树的垂序遍历从最左边的列开始直到最右边的列结束,按列索引每一......
  • 2023春秋杯 sigin_shellcode
    2023春秋杯春季赛sigin_shellcode分析ida打开,程序的主干如下,就是一个下落的游戏,主要有三个功能:menu:进行选择,继续下落或者退出shopping:用金币购买道具,用于增加攻击力down:下落,其中有一个获取金币的函数,以及到达100层时进行决战的函数。mainint__cdecl__noreturnmain(......
  • 202306062001-《远程Linux服务器——安装tomcat8、jdk1.8、mysql5——mysql 用sql建表
    因createtable...提示格式错误,什么NAME啊...,必查了一下,要设置,好多条语句(5条左右),是设置格式的。 但设置完了,说重启mysql,就失效,要重新设置(5条sql重新执行一遍!) 永久有效的解决办法是:修改“my.cnf”,我的修改如下:[client]default-character-set=utf8[mysql]default-......
  • 2023冲刺国赛模拟 13.1
    T1铲雪通过打表可以发现\(2^{23}\equiv2^{47}\pmod{998244352}\),因此对于前\(22\)次平方操作,直接暴力修改即可,超出\(22\)的平方操作,对每个位置维护长度为\(24\)的平方数组,那么每次操作就是简单的数组循环移动,线段树维护即可。code#include<cstdio>#include<algor......
  • 欧奈儿行业 RPS 排名,一图览全貌 2023-06-06
    自动复盘2023-06-06k线图是最好的老师,点击详情图可以看到行业20日RPS的排名,最底下子图是行业rps走势线跟踪板块总结:成交额超过100亿排名靠前,macd柱由绿转红公众hao:醉卧梦星河欧奈尔行业RPS排名天天更新追踪主力行业趋势更容......