java 返回 泛型 工厂模式 枚举 参数 java返回泛型list_System

集合的关系图解

java 返回 泛型 工厂模式 枚举 参数 java返回泛型list_System_02

ArrayList的概述及使用

  • ArrayList的概述:
    ArrayList是List的子类 ,而List又是Collection的子类
  • ArrayList的成员方法
    因为ArrayList继承自List,而List又继承自Collection,所以父类未被私有的成员方法ArrayList均可使用
  • ArrayList的案例:
请编写程序,将自定义对象存储到ArrayList集合,使用泛型并遍历
a) 使用迭代器遍历
b) 使用列表迭代器遍历
c) 使用size()和get()方法遍历
d) 使用增强for遍历
package org.westos.demo2;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class Demo {
    public static void main(String[] args) {
        List<Student> list = new ArrayList<>();
        list.add(new Student("张三", 23));
        list.add(new Student("李四", 22));
        list.add(new Student("王五", 25));
        Iterator<Student> iterator = list.iterator();
        System.out.println("迭代器进行遍历");
        while (iterator.hasNext()) {
            Student next = iterator.next();
            System.out.println(next);
        }
        System.out.println("列表迭代器进行遍历");
        ListIterator<Student> studentListIterator = list.listIterator();
        while (studentListIterator.hasNext()) {
            Student next = studentListIterator.next();
            System.out.println(next);
        }
        System.out.println("size()和get()方法进行遍历");
        for (int i = 0; i < list.size(); i++) {
            Student student = list.get(i);
            System.out.println(student);
        }
        System.out.println("使用增强for()循环进行遍历");
        for (Student student : list) {
            System.out.println(student);
        }
    }
}

class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

Vector的概述及使用方法

  • Vector类概述:
    Vector 类可以实现可增长的对象数组 , Vector 是同步的。
  • Vector类特有功能:
    public void addElement(E obj)
    给Vector集合添加元素
    public E elementAt(int index)
    查找某一元素的索引
    public boolean removeElement(Object obj)
    删除集合中的某个元素
    public void removeElementAt(int index)
    删除集合中指定索引处的元素
    public void setElementAt(E obj, int index)
    用指定元素替换指定索引处的元素
    public Enumeration elements()
    创建一个迭代器
  • 案例演示
请编写程序,将自定义对象存储到Vector集合,使用泛型并遍历
a) 使用迭代器遍历
b) 使用Vector特有的迭代器遍历
c) 使用size()和get()方法遍历
d) 使用增强for遍历
package org.westos.demo2;

import java.util.*;

public class Demo {
    public static void main(String[] args) {
        Vector<Student> list = new Vector<>();
        list.add(new Student("张三", 23));
        list.add(new Student("李四", 22));
        list.add(new Student("王五", 25));
        Iterator<Student> iterator = list.iterator();
        System.out.println("迭代器进行遍历");
        while (iterator.hasNext()) {
            Student next = iterator.next();
            System.out.println(next);
        }
        System.out.println("Vector特有的迭代器进行遍历");
        Enumeration<Student> elements = list.elements();
        while (elements.hasMoreElements()) {
            Student next = elements.nextElement();
            System.out.println(next);
        }
        System.out.println("size()和get()方法进行遍历");
        for (int i = 0; i < list.size(); i++) {
            Student student = list.get(i);
            System.out.println(student);
        }
        System.out.println("使用增强for()循环进行遍历");
        for (Student student : list) {
            System.out.println(student);
        }
    }
}

class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

LinkedList的概述及使用方法

  • LinkedList类概述:
    List 接口的链接列表实现 , 此实现不是同步的
  • LinkedList类特有功能:
    public void addFirst(E e)
    给集合最顶层添加元素
    public void addLast(E e)
    给集合的末尾添加元素
    public E getFirst()
    获取集合的首位元素
    public E getLast()
    获取集合的末尾元素
    public E removeFirst()
    删除集合的首位元素
    public E removeLast()
    删除集合的末尾元素
  • 案例演示:
请编写程序,将自定义对象存储到LinkedList集合,使用泛型并遍历
a) 使用迭代器遍历
b) 使用列表迭代器遍历
c) 使用size()和get()方法遍历
d) 使用增强for遍历
package org.westos.demo2;

import java.util.*;

public class Demo {
    public static void main(String[] args) {
        LinkedList<Student> list = new LinkedList<>();
        list.add(new Student("张三", 23));
        list.add(new Student("李四", 22));
        list.add(new Student("王五", 25));
        Iterator<Student> iterator = list.iterator();
        System.out.println("迭代器进行遍历");
        while (iterator.hasNext()) {
            Student next = iterator.next();
            System.out.println(next);
        }
        System.out.println("列表迭代器进行遍历");
        ListIterator<Student> studentListIterator = list.listIterator();
        while (studentListIterator.hasNext()) {
            Student next = studentListIterator.next();
            System.out.println(next);
        }
        System.out.println("size()和get()方法进行遍历");
        for (int i = 0; i < list.size(); i++) {
            Student student = list.get(i);
            System.out.println(student);
        }
        System.out.println("使用增强for()循环进行遍历");
        for (Student student : list) {
            System.out.println(student);
        }
    }
}

class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

泛型概述和基本使用

  • 泛型概述:
    是一种把类型明确的工作,推迟到创建对象,或者调用方法的时候才去明确的特殊的类型。
    参数化类型,把类型当作参数一样的传递。
  • 泛型的格式:
    <数据类型> 这里的数据类型只能是引用数据类型
  • 注意事项: 泛型类型必须是引用类型
  • 泛型好处:
    (1): 把运行时期的问题提前到了编译期间
    (2): 避免了强制类型转换
    (3):优化了程序设计,解决了黄色警告线
    注意:泛型只在编译期有效 但在运行期就擦除了
  • 泛型类的案例演示:
    以上的三个集合案例均使用了泛型

泛型方法的案例,并可以返回泛型类型

public class Demo {
   		 public <T> T show(T a) {
       		 System.out.println(a);
       		 return a;
   		 }
		}

泛型接口的演示

package org.westos.demo4;

import java.util.Collection;

public interface MyInterface<T,U,R> { //泛型接口
    public R show(T t,U u);
}
//泛型接口上的泛型,什么时候名曲,你可以在子类里面去明确
class MyDemo implements MyInterface<String,Integer,Integer>{
    @Override
    public Integer show(String s, Integer integer) {
        return null;
    }
}

泛型高级之通配符

  • 泛型高级的表达方式:
    (1):泛型通配符<?>: 任意类型,如果没有明确,那么就是Object以及任意的Java类了
    (2):? extends E : 泛型的向下限定,E及其子类
    (3):? super E : 泛型的向上限定,E及其父类
  • 案例演示:
class Animal {}
class Dog extends Animal{}
class Cat extends Animal{}
class GenericDemo {
public static void main(String[] args) {
Collection<Object> c = new ArrayList<Object>();
Collection<Animal> c1 = new ArrayList<Animal>();

Collection<? extends Animal> c5 = new ArrayList<Animal>();
Collection<? extends Animal> c6 = new ArrayList<Dog>();
Collection<? extends Animal> c7 = new ArrayList<Cat>();

Collection<? super Animal> c8 = new ArrayList<Object>();
Collection<? super Animal> c9 = new ArrayList<Animal>();

}
}

增强for的概述和使用

  • 增强for概述:
    简化数组和Collection集合的遍历
  • 格式:
    for(元素数据类型 变量 : 数组或者Collection集合) {
    使用变量即可,该变量就是元素
    }
  • 好处和注意事项:
    简化遍历
    注意事项:增强for的目标要判断是否为null
  • 案例演示:
    以上的三个集合的案例均使用了增强for()循环
    再来一个数组增强for()循环的案例演示
public class MyTest {
    public static void main(String[] args) {
    int[] arr={20,40,50,60};
     for(int ele:arr){
            System.out.println(ele);
        }
    }     
}

可变参数的概述和使用

  • 可变参数概述:
    定义方法的时候不知道该定义多少个参数
  • 格式:
    修饰符 返回值类型 方法名(数据类型… 变量名){}
  • 注意事项:
    a: 这里的变量其实是一个数组
    b: 如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个
  • 案例演示:
请编写程序,完成N个数 相加的功能,并测试
package org.westos.demo2;

public class Demo2 {
    public static void main(String[] args) {
        Integer sum = sum(1, 2, 3,4);
        System.out.println(sum);
    }
    public static Integer sum(Integer ...a){
        int sum=0;
        for (int i = 0; i < a.length; i++) {
            sum+=a[i];
        }
        return sum;
    }
}

Arrays工具类的asList()方法的使用

  • Arrays工具类的asList(T… t)方法的使用:
    将数组转换成集合
  • 注意事项:
    得到的集合长度是不可变的 你不能往这个转换后的集合中 添加元素(add) 和 删除元素(remove),只能获取元素(get)
  • 案例演示:
package org.westos.demo2;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MyTest2 {
    public static void main(String[] args) {
        //创建一个数组,遍历集合取出元素放到数组里面
        int[] arr = {20, 40, 50, 60};
        int[] arr2 = {20, 40, 50, 60};
        int[] arr3 = {20, 40, 50, 60};
        //把数组转换成集合
        List<int[]> ints = Arrays.asList(arr1,arr2,arr3);
        int[] ints1 = ints.get(0);

        //注意事项:通过asList转换过来的集合,该集合就不能再次添加元素或删除元素
        //只能获取元素来用
        //把数组转换成集合
        //如果你给的这个数组,是一个元素是基本类型的数组,他是把这个数组对象装到集合里面
        List<int[]> int3 = Arrays.asList(arr3);
        //如果你给的是一个引用类型的数组,他是把数组的元素取出来,放到集合中
        Integer[] integers2 = {10, 20, 30};
        List<Integer> integers1 = Arrays.asList(integers2);
        System.out.println(integers1);
        //如果你传了两个以上的对象数组,那么他是把两个对象数组,存到集合中
        List<Integer[]> integers3 = Arrays.asList(integers2, integers2);
    }
}