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

相关推荐
野犬寒鸦11 分钟前
Pipeline功能实现Redis批处理(项目批量查询点赞情况的应用)
java·服务器·数据库·redis·后端·缓存
lilv6612 分钟前
python中用xlrd、xlwt读取和写入Excel中的日期值
开发语言·python·excel
꧁༺摩༒西༻꧂18 分钟前
Spring Boot Actuator 监控功能的简介及禁用
java·数据库·spring boot
Java中文社群42 分钟前
快看!百度提前批的面试难度,你能拿下吗?
java·后端·面试
丨千纸鹤丨1 小时前
Tomcat
java·tomcat
发发发发8881 小时前
leetcode 674.最长连续递增序列
java·数据结构·算法·leetcode·动态规划·最长连续递增序列
阿巴~阿巴~1 小时前
构造函数:C++对象初始化的核心机制
开发语言·c++
回忆是昨天里的海1 小时前
3.3.2_1栈在表达式求值中的应用(上)
java··后缀表达式·前缀表达式
雨绸缪2 小时前
为什么 Java 在 2025 年仍然值得学习:开发人员的 25 年历程
java·后端·掘金·金石计划