💥 该系列属于【Java基础编程500题】专栏,如您需查看Java基础的其他相关题目,请您点击左边的连接
目录
8. 定义一个泛型类Pair,包含两个泛型类型的成员变量first和second,并提供一个构造方法和一个交换两个成员变量值的方法。
9. 定义一个泛型类Box,包含一个泛型类型的字段,并实现一个方法,比较两个Box对象是否相等。
10. 定义一个泛型类MinMaxPair,该类存储一对泛型类型的数据,并提供一个方法来获取最大值和最小值。
11. 定义一个泛型类Box,包含一个泛型类型的成员变量item。创建Box类的子类GiftBox,并添加一个成员变量price。
12. 定义一个泛型接口CalcInterface,包含一个方法calculate(T a, T b),实现该接口的类AddClass,用于计算两个整数的和,并在Main方法中输出结果。
15. 定义一个泛型接口PairInterface,包含一个方法swap(),该方法交换泛型类型的两个实例的值。实现该接口的类ValuePair,并在Main方法中测试交换功能。
16. 定义一个泛型接口ContainerInterface,包含一个方法getSize(),实现该接口的类MyList,并在Main方法中输出列表的大小。
17. 编写一个方法,该方法接受一个Pair类型的参数,并将该对中的两个值都增加10。
✨✨ 返回题目目录 ✨ ✨
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;
}
}