JAVA基础: 泛型

来源:互联网 发布:鹏业填报软件 编辑:程序博客网 时间:2024/06/16 21:57

泛型

泛型是javaSE 1.5 的新特性,泛型的本质是参数化类型,这种参数类型可以用在类\接口\方法的创建中,分别成为泛型类\泛型接口\泛型方法.

为什么用泛型

编译的时候检查类型安全,并且所有的强制转换自动和隐式的,提高代码的重用率.

泛型的表示:

<任意的大写字母>省去了强制转换的麻烦(向下转型)类的泛型public class Worker(T){    //成员变量的泛型    private T t;    public T getT(){        return t;    }    public T setT(){        this.t=t;    }    //成员方法的泛型:调用方法的时候需要创建这个<W>这个泛型类;    public <W> void sayHi(W w){    System.out.println(w);    }    //静态方法的泛型:静态方法随着类的加载而加载<T>    //这个<T>是静态方法自己的泛型    public static<T> void print(T t){    }       }   接口的泛型:直接在接口名后面声明泛型interface InterA<T>{    public abstract void show(T t);}class InterAImpl implments InterA<String>{    //重写接口中的方法    public void show(String t){    System.out.println(t)    }}

需求:声明一个集合保存abcd,并用迭代器遍历

ArrayList<String> list = new ArrayList<String>();    list.add("a");    list.add("b");    list.add("c");    list.add("d");//获取list遍历器ListIterator<String> listiterator = list.listiterator();//创建while循环//正向遍历while(listiterator.hasNext()){    String next = listiterator.next();    System.out.println(next);}       //逆向遍历while(listiterator.hasPrevious){    String previous = listiterator.previous();    System.out.println(previous);}

需求:集合中保存3个学生对象,用迭代器遍历(使用泛型)

ArrayList<Student> list = new ArrayList<Student>();    list.add(new Student("张三",12));    list.add(new Student("李四",13));    list.add(new Student("王二",14));    //获取list迭代器    Iterator<Student> iterator = list.Iterator();    //循环    while(iterator.hasNext){    //获取迭代器的值    Student stu = iterator.next();    System.out.println(stu.getName);} 

需求:创建两个集合Student和Person,每个集合里面个添加2人,并两个集合互相添加里面的元素

ArrayList<Person> list1 = new ArrayList();list1.add(new Person("张三",56));list1.add(new Person("李四",66));ArrayList<Student> list2 = new ArrayList();list2.add(new Student("王五",13));list2.add(new Student("赵四",16));list1.addAll(list2);System.out.println(list1);  

删除的三种方式(遍历的三种方法)

ArrayList<String> strings = new ArrayList<>();        strings.add("a");        strings.add("b");        strings.add("c");        strings.add("b");        strings.add("d");        //不适用迭代器遍历,用for循环(strings.get(i))        //如果集合中有"b"就删除它        for (int i = 0; i < strings.size(); i++) {                      if (strings.get(i).equals("b")) {                //i--表示每次删除后都把坐标回调一次,为了保证删除后也能遍历到数组每一个元素;                strings.remove(i--);            }            System.out.println(strings.get(i));        }

迭代器删除    //如果要添加元素,要使用list中特有的迭代器    //Listiterator    ArrayList<String> strings = new ArrayList<>();    strings.add("a");    strings.add("b");    strings.add("c");    strings.add("d");    Iterator<String> iterator = strings.iterator();    while (iterator.hasNext()) {        String next = (String) iterator.next();        if (iterator.next().equals("b")) {            //让迭代器去删除            iterator.remove();        }    }    System.out.println(strings);

        ArrayList<String> strings = new ArrayList<>();        strings.add("a");        strings.add("b");        strings.add("c");        strings.add("d");    //冒号后,是要遍历的容器    //冒号前,是你要遍历的容器中每一种元素    //增强for循环的底层是用迭代器实现的    //一般只用来打印,不要做删除的操作    for (String string : strings) {        System.out.println(string);    }

collection 中的 sort (list) 方法

系统自动提供了排序方法,但是里面没有具体的排序规则,所以这是系统有提供了一个接口,让你去实现这儿接口,接口中需要写排序规则(回调思想)

集合中有什么对象,就让该对象去实现这个接口

使用collections中的sort方法排序步骤
1.让集合中被排序的对象的类,去实现comparable接口
2.实现接口中的抽象方法(排序是按什么规则的方法)
3.编写排序规则
4.调用collections.sort测试

需求:创建一个人物集合并添加五个人物姓名和年龄,先把人物按年龄进行排序,再把人物按着姓名再排序

使用collections中的sort方法并创建排序方法:@Overridepublic int compareTo(Student o) {    System.out.println("测试");    // 返回0 两个值相等    // 返回整数 前面的大    // 返回负数 后面的大    // 明确:谁和谁比较 this 和 o    按年龄    return (this.getAge() - o.getAge());    //这里调用的compareTo是谁的方法?是字符串的方法    按姓名首字母    return this.getName().compareTo(o.getName());}       

ArrayList<Student> students = new ArrayList<>();        students.add(new Student("奥巴马",56));        students.add(new Student("奥朗德",53));        students.add(new Student("小布什",52));        students.add(new Student("林肯",51));        students.add(new Student("特朗普",55));        //调用系统的排序方法(底层调用了你实现接口中的排序规则方法)        Collections.sort(students);        System.out.println(students);

需求:一个小型图书馆里面存放了三类书:言情\武侠\穿越.每个分类里面都有两本书,每本书都有不同的页数.

//用泛型      library\kind\bookArrayList<ArrayList<Book>> library = new ArrayList();    //创建小集合把书装进小集合ArrayList<Book> kind1 = new ArrayList();    kind1.add(new Book("金瓶梅",900));    kind1.add(new Book("红楼梦",800)); ArrayList<Book> kind2 = new ArrayList();    kind2.add(new Book("三国演义",950));    kind2.add(new Book("水浒传",860)); ArrayList<Book> kind3 = new ArrayList();    kind3.add(new Book("霸道总裁和美女秘书",990));    kind3.add(new Book("李世民后宫传奇",930));     //然后把按种类把书放进图书馆里面    library.add(kind1);    library.add(kind2);    library.add(kind3);for(ArrayList<Book> kinds : library){    for(Book book : kinds)    System.out.println(book);}   System.out.println();

println