当前位置: 首页 > article >正文

Java 泛型与增强for

泛型

泛型就是在集合中指定存储的数据类型,而且只能存储这种类型,在List<类型>必须要指定,ArrayList<>可以指定可以不指定,基本数据类型不能作为泛型。

确定了泛型为 String,调用该方法时传递的参数类型也必须为 String 或其子类(如果存在的话),以确保类型安全。

错误示例:

 

public static void main(String[] args) {
        //定义一个集合里面指定只能存储一种数据类型
        List<String> list = new ArrayList<>();
        //调用集合
        list.add("刘一");
        list.add("陈二");
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("赵六");
        list.add("孙七");
        list.add("周八");
        list.add("吴九");
        list.add("郑十");
        //创建一个迭代器对象
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            //获得到String类型
            String next = iterator.next();
            System.out.println(next);
        }
    }

自定义的泛型

在自定义泛型时

语法:class/interface 类名/接口名  <T>{

}

T只是一个泛型的标准,使用什么字符都可以,但是都要大写,不要使用特殊字符,建议用T

自定义泛型类

public class fanxingTest1<T> {
    private T t;

    public T getT() {
        return t;
    }

    public void setT(T t) {
        this.t = t;
    }

    public static void main(String[] args) {
        fanxingTest1<String> gt = new fanxingTest1<>();
        gt.setT("哈哈");
        String t = gt.getT();
        System.out.println(t); // 打印 "哈哈"

        fanxingTest1<Integer> gt1 = new fanxingTest1<>();
        gt1.setT(1);
        Integer t1 = gt1.getT();
        System.out.println(t1);

        fanxingTest1<Integer[]> gt2 = new fanxingTest1<>();
        gt2.setT(new Integer[]{1, 2, 4});
        Integer[] t2 = gt2.getT();
        // 打印数组内容
        for (Integer num : t2) {
            System.out.print(num + " ");
        }
        System.out.println(); // 打印换行符

        // 使用Pair来存储两个值的组合
        Pair<String, Integer> gt01 = new Pair<>("张三", 30);
        System.out.println("Name: " + gt01.getKey() + ", Age: " + gt01.getValue());
        Pair1<String, Date> gt02 = new Pair1<>("李四",new Date());
        System.out.println("Name: " + gt02.getKey() + ", Age: " + gt02.getValue());
    }

}
class Pair<K, V> {
    private K key;
    private V value;

    public Pair(K key, V value) {
        this.key = key;
        this.value = value;
    }

    public K getKey() {
        return key;
    }

    public V getValue() {
        return value;
    }
}

class Pair1<K, V> {
    private K key;
    private V value;

    public Pair1(K key, V value) {
        this.key = key;
        this.value = value;
    }

    public K getKey() {
        return key;
    }

    public V getValue() {
        return value;
    }
}

增强的for

在jdk1.5之后出现了增强的for对数组,集合来做遍历

语法:

for(数据类型 变量:集合变量){

 \\\\\\\\\\

数据类型是集合或者数组中的数的类型

 public static void main(String[] args) {
        //定义一个数组
        String[] strs ={"张三","李四","王五","赵六","孙七","周八"};
        for (String str:strs
             ) {
            System.out.println(str);
        }

        System.out.println("----------------------------");

        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(2);
        for (Integer i:list
             ) {
            System.out.println(i);
        }
        System.out.println("----------------------------");

        /*//注意这个增强的for并不支持并发
        for (Integer i: list
             ) {
            if (i.equals(2)){
                list.add(10);
            }
            System.out.println(i);
        }*/

        for (int i = 0;i<list.size();i++){
            //根据索引获得集合的元素
            Integer val = list.get(i);
            //如果某个元素是2就在这个集合里面加入一个10
            if (val.equals(2)){
                list.add(10);
            }
            System.out.println(val);
        }

    }

增强的for不支持并发,如果有并发的需求请使用普通的for循环


http://www.kler.cn/a/282494.html

相关文章:

  • 数仓建设之Oracle常见语法学习
  • SwanLab安装教程
  • 电商系统开发:Spring Boot框架实战
  • FlinkSql读取kafka数据流的方法(scala)
  • 蓝队技术学习
  • 基于汇编语言的贪吃蛇程序
  • PMP–知识卡片--多标准决策分析
  • [000-01-001].第04节:Shell中的内置命令
  • 【软件测试】软件测试生命周期与Bug
  • MacOS通过Docker部署安装zookeeper、dubbo-admin,以及Docker Desktop进行管理
  • docker基本操作
  • 基于矢量光场的光学加工技术
  • <Rust>egui学习之小部件(六):如何在窗口中添加菜单栏部件?
  • 15.土堆说卷积操作(stride、padding)
  • buuctf [MRCTF2020]hello_world_go
  • 【最新】高效可用的Docker仓库源
  • 【力扣】验证回文串
  • Flask restful 前后端分离和 restful 定义
  • [BFS广度优先搜索] 迷宫
  • 如何用SpringBoot构建摇滚乐鉴赏网站?音乐分享+乐评社区,实现个性化推荐!
  • npm pack使用
  • 计算机基础知识复习8.29
  • 深度学习--复制机制
  • 深度学习——LLM大模型分词
  • MySQL编译安装
  • Linux:NAT等相关问题