首先创建3个类
1个 Person类 1个Student类 1个Worker类
Person类中 写两个变量 姓名 年龄 写出构造方法
set/get方法 重写toString方法
Student类继承Person类 写出构造方法
Worker类先声明都不写
泛型:
表示集合中 保存的数据的类型
用集合来保存字符串 要写泛型
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
ListIterator<String> listIterator = list.listIterator();
while(listIterator.hasNext()){
String next = listIterator.next();
System.out.println(next);
}
写泛型的一个好处
ArrayList<Student> students = new ArrayList<>();
students.add(new Student("lbw", 21));
students.add(new Student("white", 20));
students.add(new Student("wwk", 19));
ListIterator<Student> listIterator = students.listIterator();
Student student = listIterator = student.listIterator();
Student student = listIterator.next();
System.out.println(student);
Worker worker = (Worker)listIterator.next();
泛型的另一种写法
泛型类(泛型类 声明时 尖括号中的字母 你可以随便定义)
泛型类的类型 在初始化这个类的对象时 确定
在之前创建的Worker类中写:
public class Worker<T>{
private T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
public void work(){
System.out.println("天天搬砖 一天能搬400块");
}
public void sayHi(T t){
System.out.println(t);
}
public<Z> void print(Z z){
System.out.println(z);
}
public static<Q> void fin(Q q){
System.out.println(q);
}
}
public static void fun(){
Worker<String> worker = new Worker<>();
worker.setT("em...");
System.out.println(worker.getT);
worker.sayHi("Emm...");
worker.print("Emmm...");
Worker.fun("EmmmM...")
}
泛型接口
interface InterA<Y>{
void fun(Y y);
}
class InterAImpl implements InterA<String>{
@Override
public void fun(String y){
System.out.println(y);
}
}
以上内容只需要看懂就行
? extends E(向下限定)
和
? super E(向上限定)
addAll中的
? extends E(向下限定)
? 是子类 E 是父类
? 只能是 E类 的 子类
addAll中的
? super E(向上限定)
? 是父类 E 是 子类 ? 只能是 E类的 父类
public static void fun1() {
ArrayList<Person> pList = new ArrayList<>();
pList.add(new Person("ygs", 21));
pList.add(new Person("sxm", 20));
ArrayList<Student> sList = new ArrayList<>();
sList.add(new Student("hzn", 19));
sList.add(new Student("sxd", 21));
pList.addAll(sList);
System.out.println(pList);
}
Arrays方法中的 数组转集合
int[] array = {1, 2, 3, 4, 5};
List<int[]> asList = Arrays.asList(array);
System.out.println(asList);
Integer[] array2 = {1, 2 ,3 , 4, 5};
List<Integer> asList2 = Array.asList(array2);
System.out.println(asList2);
String[] array3 = {"nihao","fanchilema"}
List<String> asList3 = Arrays.asList(array3);
System.out.println(asList3);
boolean isContains = asList3.contain("nihao");
System.out.println(isContains);
一个小知识
public static void fun(int ... num){
//遍历
for(int i = 0; i < num.length; i++){
System.out.println(num[i]);
}
}
//通过遍历发现 num 有长度
//int ... num 相当于传入的参数 是个数组
//如果在 int ... num 之前 加其他参数
//例如: int a, int ... num
//发现也是可以的
//但是加在int ... num 之后就会出错
//所以int ... num 只能是方法参数的最后一个
// int ... num 可以接收多个参数
public static void main(String[] args){
//调用一 直接传入数组
int[] array = {1, 2, 3, 4, 5};
fun(array);
//调用二 传入多个数
fun(1, 3, 5, 7, 9);
}
集合中的删除方式
注:这个方法需要掌握
不使用迭代器
public static void fun1() {
ArrayList<String> aList = new ArrayList<>();
aList.add("a");
aList.add("b");
aList.add("b");
aList.add("c");
aList.add("d");
aList.add("e");
for(int i = 0; i < aList.size(); i++){
if(aList.get(i).equals("b")){
aList.remove(i--);
}
}
}
使用迭代器删除
public static void fun2() {
ArrayList<String> aList = new ArrayList<>();
aList.add("a");
aList.add("b");
aList.add("b");
aList.add("c");
aList.add("d");
aList.add("e");
ListIterator<String> listIterator = aList.listIterator();
while(listIterator.hasNext()){
String next = listIterator.next();
if(next.equals("b")){
listIterator.remove();
}
}
System.out.println(aList);
}
快速遍历
ArrayList<String> aList = new ArrayList<>();
aList.add("a");
aList.add("b");
aList.add("b");
aList.add("c");
aList.add("d");
aList.add("e");
for (String string : aList) {
System.out.println(string);
}
}
Day.18