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