当前位置: 首页 > news >正文

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.此处是Numbersc.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. 链表
   - 链表中的元素在内存中是不连续存储的(游离),每个元素节点都包含数据值和下一个元素的地址
   - 链表查询慢,增删快,首尾操作极快

三、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);}}
}

http://www.lryc.cn/news/153089.html

相关文章:

  • DW-AHB Central DMAC
  • JavaScript设计模式(四)——策略模式、代理模式、观察者模式
  • JS画布的基本使用
  • c++ set/multiset
  • 多线程与高并发——并发编程(4)
  • 设计模式之建造者模式
  • 源码编译安装opencv4.6.0,别的版本也行
  • 【MongoDB】Springboot中MongoDB简单使用
  • Python 面试:单元测试unit testing 使用pytest
  • 螺旋矩阵、旋转矩阵、矩阵Z字打印
  • Seaborn绘制热力图的子图
  • C++二级题目4
  • Tomcat 部署时 war 和 war exploded区别
  • Delphi IdTcpServer IdTcpClient 传输简单文本
  • 界面控件Telerik UI for WPF——Windows 11主题精简模式提升应用体验
  • PoseC3D 基于人体姿态的动作识别新范式
  • html2canvas 截图空白 或出现toDataURL‘ on ‘HTMLCanvasElement或img标签没截下来 的所有解决办法
  • Eclipse错误提示: Symbol ‘xxxx‘ could not be resolved
  • 基于Java的OA办公管理系统,Spring Boot框架,vue技术,mysql数据库,前台+后台,完美运行,有一万一千字论文。
  • 正则表达式(JAVA)
  • 264_BOOST中的Json库解析_BOOST_AUTO(itrpromodel, doc.FindMember(“productmodel“));
  • linux rpm 离线安装 nginx 自用,仅供参考
  • 第十二章 YOLO的部署实战篇(上篇)
  • 无涯教程-Android - List View函数
  • stable diffusion实践操作-重绘
  • C# 静态构造函数未执行 .net core框架
  • Java 复习笔记 - 学生管理系统篇
  • 【UIPickerView-UIDatePicker-应用程序对象 Objective-C语言】
  • 仿京东 项目笔记1
  • huggingface transformers库中LlamaForCausalLM