day32 泛型 数据结构 List

这篇具有很好参考价值的文章主要介绍了day32 泛型 数据结构 List。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、泛型

 概述

        JDK1.5同时推出了两个和集合相关的特性:增强for循环,泛型

        泛型可以修饰泛型类中的属性,方法返回值,方法参数, 构造函数的参数

Java提供的泛型类/接口

  • Collection, List, Set,Iterator 等

自定义的泛型

public class Student <H,W>{}

自定义的泛型方法

public static <T>  void showList(List<T> list){
        //list.forEach(s-> System.out.println(s));
        for (T t : list) {
            System.out.println(t);
        }
    }

 泛型的通配符

  T:  type(表示Java类型  类型)
  E: Element(主要在List中使用  元素)
  K:  key(主要在Map集合中使用,表示键)
  V: value(主要在Map集合中使用,表示值)
  ?: 表示不确定类型的Java类型

泛型的边界

  • 泛型的上界

    • 语法:? extends 类型

    • 位置:类上,方法参数

  • 泛型的下界

    • 语法:? super 类型

    • 位置: 方法参数

/**
 * 泛型的上界和下界
 *
 * ? 是泛型的通配符,不知道用什么类型的时候用?
 * 泛型上界语法: ? extends 类
 * 泛型下界语法: ? super  类
 *
 */
public class GenericityTest {
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();
        List<Number> list3 = new ArrayList<>();
        List<Object> list4 = new ArrayList<>();

        ShowCollection sc = new ShowCollection();
        sc.showList1(list1);
        //sc.showList1(list2); 编译不通过,因为String不是Number的子类
        sc.showList1(list3);
       // sc.showList1(list4);  编译不通过,Object不是 Number的子类

       // sc.showList2(list1);  //编译不通过,因为Integer不是Number的父类
      //  sc.showList2(list2);  //编译不通过,因为String不是Number的父类
        sc.showList2(list3);   //最小不能低于Number.此处是Number
        sc.showList2(list4);   //编译通过,Object是Number的父类
    }
}

class ShowCollection{
    //泛型的上界
    public  void showList1(List<? extends Number>list){}

    //泛型的下界
    public  void showList2(List<? super Number> list){}
}

二、数据结构

1. 数据结构概述
   - 数据结构式计算机底层存储、组织数据的方式,是值数据与数据之间以什么样的方式排列在一起
   - 选择合适和数据结构可以带来更搞笑的运行或者存储效率
2. 常见的数据结构
   - 栈
   - 队列
   - 链表
   - 数组
   - ...
3. 栈数据结构的执行特点
   - 后进先出,先进后出
     - 入栈/压栈: 数据进入栈的过程
     - 出栈/弹栈:数据离开栈的过程
4. 队列
   - 先进先出,后进后出
     - 入队列:数据从队列后端进入队列的过程
     - 出队列:数据从队列前端离开对列的过程
5. 数组
   - 数组是一种查询快,增删慢的数据结构
   - 数组在内存中是一块连续的存储空间
6. 链表
   - 链表中的元素在内存中是不连续存储的(游离),每个元素节点都包含数据值和下一个元素的地址
   - 链表查询慢,增删快,首尾操作极快文章来源地址https://www.toymoban.com/news/detail-705033.html

三、List

java.util.List接口,通常称为:线性表
 * List继承自Collection,特点是可以存放重复的元素并且有序
 *
 * 常用的实现类
 * java.util.ArrayList:内部用数组实现,查询性能好
 * java.util.LinkedList:内部使用链表实现,增删性能好,首尾增删性能最好
 * 在对集合操作性能没有特殊要求的条件下通常使用ArrayList
 */
public class ListDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("four");
        list.add("five");

        /**
         *  E get(int index)  返回列表中指定位置的元素。
         */
        //获取集合中下标是3个元素
        System.out.println(list.get(3));
        //用for循环遍历集合
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

        /**
         *  E set(int index, E element)
         *           用指定元素替换列表中指定位置的元素(可选操作)。
         *           返回值是被替换掉的元素。
         */
        String str = list.set(1, "二");

        System.out.println(str);
        System.out.println(list);

        //反转集合
        for(int i=0;i<list.size()/2;i++){
            //获取i上的元素
            String e = list.get(i);
            String s = list.set(list.size()-1-i,e);
            list.set(i,s);
        }
        System.out.println(list);

        System.out.println("==============================");
        /**
         * Collections类中提供了静态方法
             static void reverse(List<?> list)
             反转指定列表中元素的顺序。
         */
        Collections.reverse(list);
        System.out.println(list);

    }
}

三点五、作业练习

/**
 * 泛型:
 * 泛型只是在编译期有效,在编译之后程序会采取去繁星花的措施。将泛型相关的信息擦除
 *
 */
public class CollectionDemo3 {
    public static void main(String[] args) {
        List<String> strs = new ArrayList<>();

        List<Integer> ints = new ArrayList<>();

        Class aClass = strs.getClass();
        Class bClass = ints.getClass();
        System.out.println(aClass);
        System.out.println(bClass);


//        if(strs.equals(ints)){
//            System.out.println("类型一致");
//        }else{
//            System.out.println("类型不一致");
//        }

    }
}
/**
 * 自定义泛型方法测试
 */
public class ShowListTest {
    public static void main(String[] args) {



        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        //ShowList.showInt(list);
       ShowList.showList(list);

        List<String> strs = new ArrayList<>();
        strs.add("一");
        strs.add("二");
        strs.add("三");
        strs.add("四");
        strs.add("五");
       ShowList.showList(strs);

        List<Teacher> teas = new ArrayList<>();
        teas.add(new Teacher("张老师",1500));
        teas.add(new Teacher("李老师",2500));
        teas.add(new Teacher("孙老师",9500));
        teas.add(new Teacher("赵老师",3500));
        ShowList.showList(teas);
    }


     public static <T>  void showList(List<T> list){
        //list.forEach(s-> System.out.println(s));
        for (T t : list) {
            System.out.println(t);
        }
    }
}

到了这里,关于day32 泛型 数据结构 List的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】泛型(分享重点)

    什么是泛型? 泛型就是适用于许多许多类型,对类型参数化。 怎么创建一个泛型呢 下面我们看两段代码的对比 用泛型改写 类名后的 T 代表占位符,表示当前类是一个泛型类 泛型类的使用 示例 泛型只能接受类 泛型方法 通配符 ? 用于在泛型的使用,即为通配符 例如, Lis

    2024年04月15日
    浏览(27)
  • 【数据结构】复杂度&包装&泛型

    目录 1.时间和空间复杂度 1.1时间复杂度 1.2空间复杂度 2.包装类 2.1基本数据类型和对应的包装类 2.2装箱和拆箱 //阿里巴巴面试题 3.泛型 3.1擦除机制  3.2泛型的上界 定义 :一个算法所花费的时间与其语句的执行次数成正比,算法中的基本操作的 执行次数 ,为算法的时间复杂

    2024年02月03日
    浏览(28)
  • 【数据结构】 简单认识包装类与泛型

    在Java中,由于基本类型不是继承自Object,为了在 泛型代码 中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。 除了 Integer 和 Character, 其余基本类型的包装类都是首字母大写。 装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换

    2024年02月12日
    浏览(34)
  • 【java数据结构】泛型的初步认识(2)

    hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥💥,如果发现这篇文章有问题的话,欢迎各位评论留言指正,大家一起加油!一起chin up!👍👍  💥 个人主页: E绵绵的博客 💥 所属专栏: JAVA知识点专栏

    2024年04月26日
    浏览(25)
  • 数据结构(Java实现)-包装类和泛型

    包装类 在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了 一个包装类型。 基本数据类型和对应的包装类 装箱和拆箱 装箱操作,新建一个 Integer 类型对象,将 i 的值放入对象的某个属性中 拆箱操作,将 Integer 对象中

    2024年02月11日
    浏览(31)
  • 探索泛型与数据结构:解锁高效编程之道

    在当今信息爆炸的时代,数据结构和算法成为了程序员必备的核心技能。而泛型作为Java语言中的一项强大特性,为数据结构和算法的实现提供了更高效、更安全的方式。本文将深入探讨泛型的概念、使用场景以及结合数据结构的应用,为您打开高效编程之道。 1.1 为什么使用

    2024年02月13日
    浏览(35)
  • 数据结构----基本封装、包装类、装箱与拆箱、泛型详解

    在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。 基本数据类型 包装类 byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean 除了 Integer 和 Character, 其余基本类型的包装类都是

    2024年01月23日
    浏览(35)
  • C#学习笔记--数据结构、泛型、委托事件等进阶知识点

    ArrayList 元素类型以Object类型存储,支持增删查改的数组容器。 因而存在装箱拆箱操作,谨慎使用。 ArrayList和数组区别? ArrayList使用不用说明固定长度,数组则需要 数组存储的是指定类型的,ArrayList是Object ArrayList存在装箱拆箱,数组不存在 ArrayList数组长度用Count获取 而数组

    2024年02月08日
    浏览(35)
  • String、反射、枚举、lambda表达式以及泛型进阶(数据结构系列16)

    目录 前言: 1. String 1.1 字符串常量池 1.1.1 创建对象的思考 1.1.2 字符串常量池(StringTable) 1.1.3 再谈String对象创建 1.1.4 intern方法 2. 反射 2.1 反射的定义 2.2 反射的用途 2.3 反射的基本信息 2.4 反射相关的类 2.4.1 Class类(反射机制的起源) 2.4.1.1 Class类中的相关方法 2.5 反

    2024年02月11日
    浏览(41)
  • 【Java--数据结构】提升你的编程段位:泛型入门指南,一看就会!

    泛型是一种编程概念,它允许我们编写可以适用于多种数据类型的代码。通过使用泛型,我们可以在编译时期将具体的 数据类型作为参数 传递给代码,从而实现代码 的复用和灵活性 。 在传统的编程中,我们通常需要为不同的数据类型编写不同的代码,这样会导致代码冗余

    2024年04月26日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包