• 泛型与set接口


    泛型的概念:

        用来灵活的将数据类型应用到不同的类,方法和接口中,将数据类型作为参数进行传递。

          定义格式:修饰符 class 类名<代表泛型的变量> { }

         定义格式:修饰符 interface接口名<代表泛型的变量> { }

           1: 当创建对象对象时,确定泛型的类型。

          ArrayList<String> list = new ArrayList<String>();         此时,变量E的值就是String类型,也就是说集合里的方法也必须是string类型。

        2:子类继承的时候明确。public final class Scanner implements Iterator<String> {}  当继承或类实现接口的时候定义泛型,如果始终定义成<E>类型,可以创建对象时候的定义类型。

                                                                  ArrayList<String> list = new ArrayList<String>();

                                                                   Iterator<String> it = list.iterator();

    不加泛型的问题:

        当ArrayList集合中存储了不同的数据类型,只能用Object接,实际上就是将所有的数据类型进行向上转型(自动转型,自动装箱,则包装类成了Object的子类),也就是说不指定泛型,则泛型就成为了Object类型,只要规定了泛型,不必进行向下转型,不会出现类型转换异常。

    使用泛型的好处:

        将运行时期的ClassCastException,转移到了编译时期变成了编译失败,避免了类型强转的麻烦。

    泛型通配符与泛型限定:

        泛型通配符  ? (传谁都行),也就是当用for循环增强遍历时,传的类型只能是Object类型,

          泛型限定符 :      1: 限定上限    ?extends 父类   泛型必须是父类或父类的子类         2: 限定下限    ?  super  子类    泛型必须是子类或者子类的父类

                    public static void get(ArrayList<? > arr){

                    public static void get(ArrayList<? extends Person> arr){
                       public static void get(ArrayList<? super Person> arr){
                          for(Object obj:arr){
                              System.out.println(obj);
                          }
                        }

        当使用泛型类或者接口时,传递的数据中,泛型类型不确定,可以通过通配符<?>表示。但是一旦使用泛型的通配符后,只能使用Object类中的共性方法,集合中元素自身方法无法使用。

        代码体现:

          public class Demo02 {
           public static void main(String[] args) {
                ArrayList<Student> arr=new ArrayList<Student>();
                arr.add(new Student("小红帽",18));
                arr.add(new Student("大灰狼",20));
                ArrayList<Worker> brr=new ArrayList<Worker>();
                brr.add(new Worker("tom",19));
                brr.add(new Worker("jerry",20));
                ArrayList<Teacher> crr=new ArrayList<Teacher>();
                crr.add(new Teacher());
                crr.add(new Teacher());
                get(arr);
                get(brr);  
              }
              public static void get(ArrayList<? extends Person> arr){      传arr,brr,crr的类型,ArrayList,只有泛型不一样,同时只有定义类或类中的方法时才可以使用E,使用泛型不可以用E,
                for(Object obj:arr){                        泛型里没有多态的概念,类才认泛型,
                    System.out.println(obj);
                  }
              }
          }

    List接口:

        特点:

          1:是一个元素存取有序的集合。

          2:是一个带索引的集合。

          3:集合中可以有重复的元素。

        List接口常用方法:

          

                 在迭代时,不要使用集合的方法操作元素,也就是不要改变集合长度,在迭代时对元素操作可以通过ListIterator迭代器操作元素。

    ArrayList集合:

        ArrayList集合数据存储的结构是数组结构。元素增删慢,查找快。

    LinkedList集合:

        LinkedList集合数据存储的结构是链表结构。方便元素添加、删除的集合。

        常用方法:

            

     java中(List集合中)的数据存储的四种结构:

      1:堆栈:先进后出

      2:队列:先进先出

      3:数组结构:有下标,查询快,增删慢,因为数组长度不可变,所有要重新创建一个数组

      4:链表结构:查询慢,无下标(从头开始查),增删快,不需要创建新的链表。

    内存中的存储结构 :方法和数据共享区,栈内存,堆内存。   

  • 相关阅读:
    《构建之法》阅读笔记02
    《构建之法》阅读笔记01
    学习进度
    “校园知网”端午假期冲刺计划书
    学习进度
    计算最长英语单词链
    第一周冲刺_周日总结
    构建之法阅读笔记03
    第一周冲刺_周六总结
    软件工程概论第十四周学习进度
  • 原文地址:https://www.cnblogs.com/maxuefeng/p/13807722.html
Copyright © 2020-2023  润新知