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循环

相关推荐
sg_knight2 小时前
Spring 框架中的 SseEmitter 使用详解
java·spring boot·后端·spring·spring cloud·sse·sseemitter
郑州光合科技余经理4 小时前
同城系统海外版:一站式多语种O2O系统源码
java·开发语言·git·mysql·uni-app·go·phpstorm
一只乔哇噻4 小时前
java后端工程师+AI大模型开发进修ing(研一版‖day60)
java·开发语言·人工智能·学习·语言模型
LNN20224 小时前
Linuxfb+Qt 输入设备踩坑记:解决 “节点存在却无法读取“ 问题
开发语言·qt
Dolphin_Home4 小时前
笔记:SpringBoot静态类调用Bean的2种方案(小白友好版)
java·spring boot·笔记
foxsen_xia5 小时前
go(基础06)——结构体取代类
开发语言·算法·golang
MetaverseMan5 小时前
Java虚拟线程实战
java
巨人张5 小时前
C++火柴人跑酷
开发语言·c++
浪潮IT馆5 小时前
Tomcat运行war包的问题分析与解决步骤
java·tomcat
ID_180079054735 小时前
基于 Python 的 Cdiscount 商品详情 API 调用与 JSON 核心字段解析(含多规格 SKU 提取)
开发语言·python·json