Java 泛型与增强for

泛型

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

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

错误示例:

java 复制代码
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

自定义泛型类

java 复制代码
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(数据类型 变量:集合变量){

\\\\\\\\\\

}

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

java 复制代码
 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循环

相关推荐
azhou的代码园3 分钟前
基于JAVA+SpringBoot+Vue的制造装备物联及生产管理ERP系统
java·spring boot·制造
波音彬要多做11 分钟前
41 stack类与queue类
开发语言·数据结构·c++·学习·算法
Swift社区19 分钟前
Excel 列名称转换问题 Swift 解答
开发语言·excel·swift
一道微光23 分钟前
Mac的M2芯片运行lightgbm报错,其他python包可用,x86_x64架构运行
开发语言·python·macos
矛取矛求27 分钟前
QT的前景与互联网岗位发展
开发语言·qt
Leventure_轩先生27 分钟前
[WASAPI]从Qt MultipleMedia来看WASAPI
开发语言·qt
向宇it41 分钟前
【从零开始入门unity游戏开发之——unity篇01】unity6基础入门开篇——游戏引擎是什么、主流的游戏引擎、为什么选择Unity
开发语言·unity·c#·游戏引擎
wm104343 分钟前
java web springboot
java·spring boot·后端
smile-yan1 小时前
Provides transitive vulnerable dependency maven 提示依赖存在漏洞问题的解决方法
java·maven
老马啸西风1 小时前
NLP 中文拼写检测纠正论文-01-介绍了SIGHAN 2015 包括任务描述,数据准备, 绩效指标和评估结果
java