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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值