【Java集合进阶】LinkedList和迭代器的源码分析&泛型类、泛型方法、泛型接口

2024-04-11 1772阅读
🍬 博主介绍
👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

目录

LinkedList和迭代器的源码分析

ArraList集合底层原理

LinkedList集合

LinkedList底层源码分析

泛型类、泛型方法、泛型接口

泛型深入

泛型的好处及拓展

泛型的细节

1、泛型类

代码演示:

2、泛型方法

练习 泛型方法的练习

3、泛型接口


LinkedList和迭代器的源码分析

ArraList集合底层原理

  • 利用空参创建的集合,在底层创建一个默认长度为0的数组

  • 添加第一个元素时,底层会创建一个新的长度为10的数组

  • 存满时,会扩容1.5倍

  • 如果一次添加多个元素,1.5倍还放不下,则新创建数组的长度以实际为准

    【Java集合进阶】LinkedList和迭代器的源码分析&泛型类、泛型方法、泛型接口

    LinkedList集合

    • 底层数据结构是双链表,查询慢,增删快,但是如果操作的是首尾元素,速度也是极快的。
    • LinkedList本身多了很多直接操作首尾元素的特有API。

      【Java集合进阶】LinkedList和迭代器的源码分析&泛型类、泛型方法、泛型接口

      【Java集合进阶】LinkedList和迭代器的源码分析&泛型类、泛型方法、泛型接口

      LinkedList底层源码分析

      【Java集合进阶】LinkedList和迭代器的源码分析&泛型类、泛型方法、泛型接口

      泛型类、泛型方法、泛型接口

      泛型深入

      泛型:是jdk5中引入的特性,可以在编译阶段约束的数据类型,并进行检查。

      泛型的格式:

      注意:泛型只能支持引用数据类型

      不使用泛型,无法使用前面的特有行为

      package list;
      import java.lang.reflect.Array;
      import java.util.ArrayList;
      import java.util.Iterator;
      import java.util.Objects;
      public class generics {
          public static void main(String[] args) {
              //没有泛型的时候,集合如何存储数据
              //结论:
              //如果我们没有给集合指定类型,默认认为所有的数据类型都是Object类型
              //此时可以往集合添加任意的数据类型。
              //带来一个坏处:我们在获取数据的时候,无法使用他的特有行为。
              //此时推出了泛型,可以在添加数据的时候就把类型进行统一。
              //而且我们在获取数据的时候,也省的强转了,非常的方便。
              //1、创建集合的对象
              ArrayList list = new ArrayList();
              //2、添加数据
              list.add(123);
              list.add("aaa");
              list.add(new student("zhangsan",21));
              //3、遍历集合获取里面的每一个元素
              Iterator it = list.iterator();
              while (it.hasNext()){
                  Object obj = it.next();
                  System.out.println(obj);
              }
          }
      }
      

      使用泛型:

      package list;
      import java.lang.reflect.Array;
      import java.util.ArrayList;
      import java.util.Iterator;
      import java.util.Objects;
      public class generics {
          public static void main(String[] args) {
              //没有泛型的时候,集合如何存储数据
              //结论:
              //如果我们没有给集合指定类型,默认认为所有的数据类型都是Object类型
              //此时可以往集合添加任意的数据类型。
              //带来一个坏处:我们在获取数据的时候,无法使用他的特有行为。
              //此时推出了泛型,可以在添加数据的时候就把类型进行统一。
              //而且我们在获取数据的时候,也省的强转了,非常的方便。
              //1、创建集合的对象
              ArrayList list = new ArrayList();
              //2、添加数据
              list.add("aaa");
              //3、遍历集合获取里面的每一个元素
              Iterator it = list.iterator();
              while (it.hasNext()){
                  String str = it.next();
                  //多态的弊端是不能访问子类的特有功能
                  System.out.println(str);
              }
          }
      }
      

      【Java集合进阶】LinkedList和迭代器的源码分析&泛型类、泛型方法、泛型接口

      泛型的好处及拓展

      统一数据类型。

      把运行时期的问题提前到了编译期间,避免了强制类型转换可能出现的异常,因为在编译阶段类型就能确定下来。

      【Java集合进阶】LinkedList和迭代器的源码分析&泛型类、泛型方法、泛型接口

      【Java集合进阶】LinkedList和迭代器的源码分析&泛型类、泛型方法、泛型接口

      泛型的细节

      • 泛型中不能写基本数据类型

      • 指定泛型的具体类型后,传递数据时,可以传入该类类型或者其子类类型

      • 如果不写泛型,类型默认是Object

        1、泛型类

        【Java集合进阶】LinkedList和迭代器的源码分析&泛型类、泛型方法、泛型接口

        代码演示:
        package list;
        import java.util.Arrays;
        import java.util.Objects;
        public class myarraylist {
            Object[] obj = new Object[10];
            int size;
            /*
            E : 表示是不确定的类型。该类型在类名后面已经定义过了。
            e:形参的名字,变量名
            * */
            public boolean add(E e){
                obj[size] = e;
                size++;
                return true;
            }
            public E get(int index){
                return (E)obj[index];
            }
            @Override
            public String toString() {
                return Arrays.toString(obj);
            }
        }
        
        package list;
        public class GenericsDemo2 {
            public static void main(String[] args) {
                       /* MyArrayList list = new MyArrayList();
                list.add("aaa");
                list.add("bbb");
                list.add("ccc");
                System.out.println(list);*/
                myarraylist list2 = new myarraylist();
                list2.add(123);
                list2.add(456);
                list2.add(789);
                int i = list2.get(0);
                System.out.println(i);
                System.out.println(list2);
            }
        }
        

        【Java集合进阶】LinkedList和迭代器的源码分析&泛型类、泛型方法、泛型接口

        2、泛型方法

        【Java集合进阶】LinkedList和迭代器的源码分析&泛型类、泛型方法、泛型接口

        练习 泛型方法的练习

        定义一个工具类:listutil

        类中定义一个静态的方法addAll,用来添加多个集合的元素。

        【Java集合进阶】LinkedList和迭代器的源码分析&泛型类、泛型方法、泛型接口

        listutil类:

        package list;
        import java.util.ArrayList;
        public class listutil {
            private listutil(){}
            public static void addAll(ArrayList list, E e1, E e2, E e3, E e4){
                list.add(e1);
                list.add(e2);
                list.add(e3);
                list.add(e4);
            }
            public void show(){
                System.out.println("hello world!!!");
            }
        }
        

        GenericsDemo3类:

        package list;
        import java.util.ArrayList;
        //定义一个工具类:listutil
        //类中定义一个静态方法addall,用来添加多个集合的元素
        public class GenericsDemo3 {
            public static void main(String[] args) {
                ArrayList list = new ArrayList();
                listutil.addAll(list,"aaa","bbb","ccc","ddd");
                System.out.println(list);
                
            }
        }
        

        3、泛型接口

        【Java集合进阶】LinkedList和迭代器的源码分析&泛型类、泛型方法、泛型接口

        【Java集合进阶】LinkedList和迭代器的源码分析&泛型类、泛型方法、泛型接口

        定义一个myarraylist2类

        package list;
        import java.util.Collection;
        import java.util.Iterator;
        import java.util.List;
        import java.util.ListIterator;
        public class myarraylist2 implements List {
            @Override
            public int size() {
                return 0;
            }
            @Override
            public boolean isEmpty() {
                return false;
            }
            @Override
            public boolean contains(Object o) {
                return false;
            }
            @Override
            public Iterator iterator() {
                return null;
            }
            @Override
            public Object[] toArray() {
                return new Object[0];
            }
            @Override
            public  T[] toArray(T[] a) {
                return null;
            }
            @Override
            public boolean add(String s) {
                return false;
            }
            @Override
            public boolean remove(Object o) {
                return false;
            }
            @Override
            public boolean containsAll(Collection c) {
                return false;
            }
            @Override
            public boolean addAll(Collection c) {
                return false;
            }
            @Override
            public boolean retainAll(Collection c) {
                return false;
            }
            @Override
            public void clear() {
            }
            @Override
            public String get(int index) {
                return null;
            }
            @Override
            public String set(int index, String element) {
                return null;
            }
            @Override
            public void add(int index, String element) {
            }
            @Override
            public String remove(int index) {
                return null;
            }
            @Override
            public int indexOf(Object o) {
                return 0;
            }
            @Override
            public int lastIndexOf(Object o) {
                return 0;
            }
            @Override
            public ListIterator listIterator() {
                return null;
            }
            @Override
            public ListIterator listIterator(int index) {
                return null;
            }
            @Override
            public List subList(int fromIndex, int toIndex) {
                return null;
            }
        }
        

        GenericsDemo4类:

        package list;
        public class GenericsDemo4 {
            public static void main(String[] args) {
                /*
                    泛型接口的两种使用方式:
                        1.实现类给出具体的类型
                        2.实现类延续泛型,创建实现类对象时再确定类型
                */
                //1、实现类给出具体的类型
        //        myarraylist2 list = new myarraylist2();
                //2、实现类延续泛型,创建实现类对象时再确定类型
                myarraylist2 list = new myarraylist2();
                list.add("123");
                System.out.println(list);
            }
        }
        
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]