collection可以直接打印内容,而不是地址,内部已经重写了。
List家族:
package com.itheima.d6_collection_update_delete;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
目标:研究集合遍历并删除元素可能出现的:并发修改异常问题。
*/
public class Test {
public static void main(String[] args) {
// 1、准备数据
ArrayList<String> list = new ArrayList<>();
list.add("黑马");
list.add("Java");
list.add("Java");
list.add("赵敏");
list.add("赵敏");
list.add("素素");
System.out.println(list);
// [黑马, Java, Java, 赵敏, 赵敏, 素素]
// it
// 需求:删除全部的Java信息。
// a、迭代器遍历删除
// Iterator<String> it = list.iterator();
// while (it.hasNext()){
// String ele = it.next();
// if("Java".equals(ele)){
// // 删除Java
// // list.remove(ele); // 集合删除会出毛病
// it.remove(); // 删除迭代器所在位置的元素值(没毛病)
// }
// }
// System.out.println(list);
// b、foreach遍历删除 (会出现问题,这种无法解决的,foreach不能边遍历边删除,会出bug)
// for (String s : list) {
// if("Java".equals(s)){
// list.remove(s);
// }
// }
// c、lambda表达式(会出现问题,这种无法解决的,Lambda遍历不能边遍历边删除,会出bug)
// list.forEach(s -> {
// if("Java".equals(s)){
// list.remove(s);
// }
// });
// d、for循环(边遍历边删除集合没毛病,但是必须从后面开始遍历删除才不会出现漏掉应该删除的元素)
// for (int i = list.size() - 1; i >= 0 ; i--) {
// String ele = list.get(i);
// if("Java".equals(ele)){
// list.remove(ele);
// }
// }
// System.out.println(list);
// E、for循环(或者从前往后删除,每次删除了要删的元素之后做一个i--的操作)
for (int i = 0; i < list.size() ; i++) {
String ele = list.get(i);
if("Java".equals(ele)){
list.remove(ele);
i--;
}
}
System.out.println(list);
}
}
泛型:
泛型类:
泛型方法:把出现泛型变量的地方全部替换成传输的真实数据类型。
泛型接口:
package com.itheima.d11_genericity_limit;
import java.util.ArrayList;
/**
目标:泛型通配符。?
需求:开发一个极品飞车的游戏,所有的汽车都能一起参与比赛。
注意:
虽然BMW和BENZ都继承了Car
但是ArrayList<BMW>和ArrayList<BENZ>与ArrayList<Car>没有关系的!!
通配符:?
?可以在“使用泛型”的时候代表一切类型。
E T K V 是在定义泛型的时候使用的。
泛型的上下限:
? extends Car : ?必须是Car或者其子类 泛型上限
? super Car :?必须是Car或者其父类 泛型下限
小结:
通配符:?
?可以在“使用泛型”的时候代表一切类型。
*/
public class GenericDemo {
public static void main(String[] args) {
ArrayList<BMW> bmws = new ArrayList<>();
bmws.add(new BMW());
bmws.add(new BMW());
bmws.add(new BMW());
go(bmws);
ArrayList<BENZ> benzs = new ArrayList<>();
benzs.add(new BENZ());
benzs.add(new BENZ());
benzs.add(new BENZ());
go(benzs);
ArrayList<Dog> dogs = new ArrayList<>();
dogs.add(new Dog());
dogs.add(new Dog());
dogs.add(new Dog());
// go(dogs);
}
/**
所有车比赛
*/
public static void go(ArrayList<? extends Car> cars){
}
}
class Dog{
}
class BENZ extends Car{
}
class BMW extends Car{
}
// 父类
class Car{
}