Java基础编程500题——泛型

💥 该系列属于【Java基础编程500题】专栏,如您需查看Java基础的其他相关题目,请您点击左边的连接

目录

1. 定义一个泛型方法,用于交换两个元素的位置。

2. 定义一个泛型方法,用于查找数组中的最大值。

3. 定义一个泛型方法,用于打印数组中的所有元素。

4. 编写一个泛型方法,用于计算数组中所有元素的总和。

5. 编写一个泛型方法,用于复制一个泛型数组。

6. 编写一个泛型方法,打印两个泛型对象的字符串表示。

7*. 编写一个泛型方法,打印两个泛型变量的类型。

8. 定义一个泛型类Pair,包含两个泛型类型的成员变量first和second,并提供一个构造方法和一个交换两个成员变量值的方法。

9. 定义一个泛型类Box,包含一个泛型类型的字段,并实现一个方法,比较两个Box对象是否相等。

10. 定义一个泛型类MinMaxPair,该类存储一对泛型类型的数据,并提供一个方法来获取最大值和最小值。

11. 定义一个泛型类Box,包含一个泛型类型的成员变量item。创建Box类的子类GiftBox,并添加一个成员变量price。

12. 定义一个泛型接口CalcInterface,包含一个方法calculate(T a, T b),实现该接口的类AddClass,用于计算两个整数的和,并在Main方法中输出结果。

13. 定义一个泛型接口CompareInterface,包含一个方法compare(T a, T b),实现该接口的类StringComparator,用于比较两个字符串的大小,并在Main方法中输出比较结果。

14. 定义一个泛型接口TransformInterface,包含一个方法transform(T t),实现该接口的类StringToIntConverter,用于将字符串转换为整数,并在Main方法中输出转换结果。,>

15. 定义一个泛型接口PairInterface,包含一个方法swap(),该方法交换泛型类型的两个实例的值。实现该接口的类ValuePair,并在Main方法中测试交换功能。

16. 定义一个泛型接口ContainerInterface,包含一个方法getSize(),实现该接口的类MyList,并在Main方法中输出列表的大小。

17. 编写一个方法,该方法接受一个Pair类型的参数,并将该对中的两个值都增加10。

18*. 编写一个方法,计算传入List的中所有元素的和。


✨✨  返回题目目录 ✨ ✨ 

Java基础编程500题


1. 定义一个泛型方法,用于交换两个元素的位置。

public class Main {
    public static void main(String[] args) {
        Integer[] intArr = {1, 2};
        swap(intArr, 0, 1);
        System.out.println("交换后的数组:[" + intArr[0] + ", " + intArr[1] + "]");
        
        Character[] charArr = {'a','b'};
        swap(charArr,0,1);
        System.out.println("交换后的数组:[" + charArr[0] + ", " + charArr[1] + "]");

    }

    public static <T> void swap(T[] arr, int i, int j) {
        T temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

2. 定义一个泛型方法,用于查找数组中的最大值。

public class Main {
    public static void main(String[] args) {
        Integer[] intArr = {1, 3, 5, 2, 4};
        System.out.println("数组中的最大值为:" + findMax(intArr));      //数组中的最大值为:5

        Double[] doubleArr = {1.0, 3.0, 5.0, 2.0, 4.0};
        System.out.println("数组中的最大值为:" + findMax(doubleArr));   //数组中的最大值为:5.0
    }

    public static <T extends Comparable<T>> T findMax(T[] arr) { //Comparable的儿子们都可以使用findMax这个方法,返回值也是T类型的
        T max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i].compareTo(max) > 0) {
                max = arr[i];
            }
        }
        return max;
    }
}

3. 定义一个泛型方法,用于打印数组中的所有元素。

public class Main {
    public static void main(String[] args) {
        Character[] arr = {'A', 'B', 'C', 'D'};
        printArray(arr);
    }

    public static <T> void printArray(T[] arr) {
        for (T element : arr) {
            System.out.println("元素:" + element);
        }
    }
}

4. 编写一个泛型方法,用于计算数组中所有元素的总和。

public class Main {
    public static void main(String[] args) {
        Integer[] arr = {1, 2, 3, 4, 5};
        System.out.println("数组元素之和:" + sum(arr));
    }

    public static <T extends Number> double sum(T[] arr) {
        double sum = 0;
        for (T num : arr) {
            sum += num.doubleValue();
        }
        return sum;
    }
}

5. 编写一个泛型方法,用于复制一个泛型数组。

public class Main {
    public static void main(String[] args) {
        Integer[] arr = {1, 2, 3, 4, 5};
        Integer[] copiedArr = copyArray(arr);
        System.out.print("复制后的数组:");
        for (Integer num : copiedArr) {
            System.out.print(num + " ");
        }
    }

    public static <T> T[] copyArray(T[] arr) {
        return arr.clone();
    }
}

6. 编写一个泛型方法,打印两个泛型对象的字符串表示。

public class Main {
    public static void main(String[] args) {
        printObjects("Hello", 123);
    }

    public static <T, K> void printObjects(T t, K k) {
        System.out.println("对象t的字符串表示:" + t);
        System.out.println("对象k的字符串表示:" + k);
    }
}

7*. 编写一个泛型方法,打印两个泛型变量的类型。

(需要掌握反射的知识点)

public class Main {
    public static void main(String[] args) {
        printType("字符串", 100);
    }

    public static <T, K> void printType(T t, K k) {
        // 必须使用getClass()方法,因为泛型参数在运行时会被擦除,无法直接使用.class来获取类型信息
        // 通过反射获取类型
        System.out.println("变量t的类型为:" + t.getClass().getSimpleName()); //变量t的类型为:String
        System.out.println("变量k的类型为:" + k.getClass().getSimpleName()); //变量k的类型为:Integer
    }
}

8. 定义一个泛型类Pair,包含两个泛型类型的成员变量first和second,并提供一个构造方法和一个交换两个成员变量值的方法。

class Pair<T> {
    private T first;
    private T second;

    public Pair(T first, T second) {
        this.first = first;
        this.second = second;
    }

    public void swap() {
        T temp = first;
        first = second;
        second = temp;
    }

    public void printPair() {
        System.out.println("first: " + first + ", second: " + second);
    }
}

public class Main {
    public static void main(String[] args) {
        Pair<String> pair = new Pair<>("你好", "世界");
        pair.printPair(); //first: 你好, second: 世界
        pair.swap();
        pair.printPair(); //first: 世界, second: 你好
    }
}

9. 定义一个泛型类Box,包含一个泛型类型的字段,并实现一个方法,比较两个Box对象是否相等。

class Box<T> {
    private T value;

    public Box(T value) {
        this.value = value;
    }

    public boolean equals(Box<T> other) {
        return this.value.equals(other.value);
    }
}

public class Main {
    public static void main(String[] args) {
        Box<String> box1 = new Box<>("Java");
        Box<String> box2 = new Box<>("Java");
        System.out.println("两个Box对象是否相等:" + box1.equals(box2));
    }
}

10. 定义一个泛型类MinMaxPair,该类存储一对泛型类型的数据,并提供一个方法来获取最大值和最小值。

class MinMaxPair<T extends Comparable<T>> {
    private T min;
    private T max;

    public MinMaxPair(T first, T second) {
        if (first.compareTo(second) <= 0) {
            this.min = first;
            this.max = second;
        } else {
            this.min = second;
            this.max = first;
        }
    }

    public T getMin() {
        return min;
    }

    public T getMax() {
        return max;
    }
}

public class Main {
    public static void main(String[] args) {
        MinMaxPair<Integer> pair = new MinMaxPair<>(10, 20);
        System.out.println("最小值:" + pair.getMin());
        System.out.println("最大值:" + pair.getMax());
    }
}

11. 定义一个泛型类Box,包含一个泛型类型的成员变量item。创建Box类的子类GiftBox,并添加一个成员变量price。

class Box<T> {
    private T item;

    public Box(T item) {
        this.item = item;
    }

    public T getItem() {
        return item;
    }
}

class GiftBox<T> extends Box<T> {
    private double price;

    public GiftBox(T item, double price) {
        super(item);
        this.price = price;
    }

    public void printInfo() {
        System.out.println("物品:" + getItem() + ", 价格:" + price);
    }
}

public class Main {
    public static void main(String[] args) {
        GiftBox<String> giftBox = new GiftBox<>("礼物", 99.9);
        giftBox.printInfo(); //物品:礼物, 价格:99.9
    }
}

12. 定义一个泛型接口CalcInterface<T>,包含一个方法calculate(T a, T b),实现该接口的类AddClass,用于计算两个整数的和,并在Main方法中输出结果。

// 定义泛型接口
interface CalcInterface<T> {
    T calculate(T a, T b);
}

// 实现泛型接口的类
class AddClass implements CalcInterface<Integer> {
    @Override
    public Integer calculate(Integer a, Integer b) {
        return a + b;
    }
}

public class Main {
    public static void main(String[] args) {
        AddClass addClass = new AddClass();
        System.out.println("计算结果为:" + addClass.calculate(5, 3));
    }
}

13. 定义一个泛型接口CompareInterface<T>,包含一个方法compare(T a, T b),实现该接口的类StringComparator,用于比较两个字符串的大小,并在Main方法中输出比较结果。

// 定义泛型接口
interface CompareInterface<T> {
    int compare(T a, T b);
}

// 实现泛型接口的类
class StringComparator implements CompareInterface<String> {
    @Override
    public int compare(String a, String b) {
        return a.compareTo(b);
    }
}

public class Main {
    public static void main(String[] args) {
        StringComparator comparator = new StringComparator();
        int result = comparator.compare("Java", "C++");
        if (result > 0) {
            System.out.println("第一个字符串大于第二个字符串");
        } else if (result < 0) {
            System.out.println("第一个字符串小于第二个字符串");
        } else {
            System.out.println("两个字符串相等");
        }
    }
}

14. 定义一个泛型接口TransformInterface<T, R>,包含一个方法transform(T t),实现该接口的类StringToIntConverter,用于将字符串转换为整数,并在Main方法中输出转换结果。

// 定义泛型接口
interface TransformInterface<T, R> {
    R transform(T t);
}

// 实现泛型接口的类
class StringToIntConverter implements TransformInterface<String, Integer> {
    @Override
    public Integer transform(String t) {
        return Integer.parseInt(t);
    }
}

public class Main {
    public static void main(String[] args) {
        StringToIntConverter converter = new StringToIntConverter();
        int result = converter.transform("123");
        System.out.println("字符串转换为整数:" + result);
    }
}

15. 定义一个泛型接口PairInterface<T>,包含一个方法swap(),该方法交换泛型类型的两个实例的值。实现该接口的类ValuePair<T>,并在Main方法中测试交换功能。

interface PairInterface<T> {
    void swap();
}

class ValuePair<T> implements PairInterface<T> {
    private T first;
    private T second;

    public ValuePair(T first, T second) {
        this.first = first;
        this.second = second;
    }

    @Override
    public void swap() {
        T temp = first;
        first = second;
        second = temp;
    }

    public T getFirst() {
        return first;
    }

    public T getSecond() {
        return second;
    }
}

public class Main {
    public static void main(String[] args) {
        ValuePair<Integer> pair = new ValuePair<>(1, 2);
        System.out.println("交换前:first = " + pair.getFirst() + ", second = " + pair.getSecond());
        pair.swap();
        System.out.println("交换后:first = " + pair.getFirst() + ", second = " + pair.getSecond());
    }
}

16. 定义一个泛型接口ContainerInterface<T>,包含一个方法getSize(),实现该接口的类MyList<T>,并在Main方法中输出列表的大小。

import java.util.Arrays;

// 定义泛型接口
interface ContainerInterface<T> {
    int getSize();
}

// 实现泛型接口的类
class MyList<T> implements ContainerInterface<T> {
    private Object[] array; // 使用Object数组以支持泛型
    private int size = 0; // 用于追踪数组中元素的数量

    public MyList() {
        array = new Object[10]; // 初始化数组,假设初始容量为10
    }

    public void add(T element) {
        if (size == array.length) {
            // 扩容数组
            array = Arrays.copyOf(array, array.length * 2);
        }
        array[size++] = element;
    }

    @Override
    public int getSize() {
        return size;
    }
}

public class Main {
    public static void main(String[] args) {
        MyList<String> myList = new MyList<>();
        myList.add("Java");
        myList.add("泛型");
        System.out.println("列表大小为:" + myList.getSize());
    }
}

17. 编写一个方法,该方法接受一个Pair<? super Integer>类型的参数,并将该对中的两个值都增加10。

class Pair<T> {
    private T first;
    private T last;

    public Pair(T first, T last) {
        this.first = first;
        this.last = last;
    }

    public T getFirst() {
        return first;
    }

    public T getLast() {
        return last;
    }

    public void setFirst(T first) {
        this.first = first;
    }

    public void setLast(T last) {
        this.last = last;
    }
}

public class Main {
    public static void main(String[] args) {
        Pair<Number> pair = new Pair<>(5, 10);
        increasePairValues(pair);
        System.out.println("第一个值:" + pair.getFirst() + ",第二个值:" + pair.getLast());
    }

    static void increasePairValues(Pair<? super Integer> pair) {
        if (pair.getFirst() instanceof Integer) {
            pair.setFirst((Integer) pair.getFirst() + 10);
        }
        if (pair.getLast() instanceof Integer) {
            pair.setLast((Integer) pair.getLast() + 10);
        }
    }
}

18*. 编写一个方法,计算传入List<? extends Number>的中所有元素的和。

(需要掌握集合ArrayList的知识点)

import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = List.of(1, 2, 3, 4, 5);
        System.out.println("列表元素之和为:" + sumOfList(list));
    }

    static double sumOfList(List<? extends Number> list) {
        double sum = 0;
        for (Number n : list) {
            sum += n.doubleValue();
        }
        return sum;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值