码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • java基础巩固5


    泛型

    (1)使用泛型时,把泛型参数替换为需要的class类型。
    (2)可以省略编译器能自动推断出的类型,例如:List list = new ArrayList<>();
    (3)不指定泛型参数类型时,编译器会给出警告,且只能将视为Object类型;
    (4)可以再接口中定义泛型类型,实现此接口的类必须实现正确地泛型类型。

    擦拭法

    (1)泛型是一种类似“模板代码”的技术,不同语言的泛型实现方式不一定相同。java语言的泛型实现方法是擦拭法(Type Erasure)。擦拭法是指,虚拟机对泛型一无所知,所有的工作都是编译器做的。编译器把类型视为Object,编译器根据实现安全地强制转型。
    (2)java泛型的局限:
    局限一:不能是基本类型,例如int,因为实际类型时Object,Object类型无法持有基本类型。
    局限二:无法去的带泛型的Class。也就是说,所有泛型实例,无论T的类型是什么,getClass()返回同一个Class,因为编译后它们全部都是Pair。
    局限三:无法判断带泛型的类型。
    局限四:不能实例化T类型。

    泛型继承

    (1)一个类可以继承自一个泛型类。
    (2)Pair不是Pair的子类,因此,add(Pair)不接受参数类型Pair。此时可以使用Pair是的方法接受所有泛型类型为Number或Number子类的Pair类型。这种的泛型定义称之为上界通配符,即把泛型类型T的上界限定在Number了。
    (3)Pair表示,方法参数接受所有泛型Integer或者Integer父类的Pair类型。这里表示允许调用set(? super integer)方法传入Integer的引用,不允许调用get()方法获得Integer的引用。
    换句话说,使用通配符作为方法参数,表示方法内部代码对于参数只能写,不能读。

    PECS原则

    何时使用extends,何时使用super。为了方便记忆,我们可以使用PECS原则:Prodcuer Extends Consumer Super。即:如果需要返回T,它是生产者(Producer),要使用extends通配符;如果需要写入T,它是消费者(Consumer),要使用super通配符。

    无限定通配符

    因为通配符既没有extends,也没有super,因此:
    (1)不允许调用set(T)方法并传入引用(null除外);
    (2)不允许调用T get()方法并获取T引用(只能获取Object引用)。
    换句话说,既不能读,也不能写,那只能做一些null判断。无限定通配符很少使用,可以用替换,同时它是所有的超类。

    使用Properties

    配置文件的特点是,它的Key-Value一般都是String-String类型的,因此我们完全可以用Map来表示它。
    (1)读取配置文件,java默认配置文件以.properties为扩展名,每行以key=value表示,以#开头的是注释。用Properties读取配置文件,一共有三步:
    1.创建Properties实例;
    2.调用load()方法读取文件。
    3.调用getProperty()获取配置。

    使用Queue

    (1)添加、删除、获取队列元素总是有两个方法,这是因为在添加或获取元素失败时,这两个方法的行为是不同的。
    在这里插入图片描述
    (2)我们可以发现,LinkedList既实现了List接口,又实现了Queue接口,但是在使用的时候,如果我们把它当做List,就获取List的引用,如果我们把它当做Queue,就获取Queue的引用。始终按照面向抽象编程的原则编写代码,可以大大提高代码的质量。

    使用PriorityQueue

    (1)PriorityQueue实现了一个优先队列:从队首获取元素时,总是获取优先级最高的元素。
    (2)PriorityQueue默认按元素比较的顺序排序(必须实现Comparable接口),也可以通过Comparator自定义排序算法(元素就不必实现Comparable接口)。

    使用Deque

    (1)允许队列两头都进,两头都出,这种队列叫双端队列(Double Ended Queue),学名Deque。
    在这里插入图片描述

  • 相关阅读:
    Postgresql更改字段默认值、设置字段默认值、删除字段默认值
    手搓一个“七夕限定”,用3D Engine 5分钟实现烟花绽放效果
    潮玩宇宙:大逃杀模式的利与弊
    java毕业设计视频点播系统Mybatis+系统+数据库+调试部署
    SpringClouldAlibaba 之 初识 Sentinel
    『大模型笔记』缩放定律(scaling laws)是由记忆而非智力解释的吗?
    RK3568开发板评测篇(二):开发环境搭建
    API简介,如何运用API接口获取商品数据(淘宝/天猫、1688、拼多多、京东等二十多个海内外电商平台)
    CentOS 7 中安装Kafka
    Linux线程:线程分离
  • 原文地址:https://blog.csdn.net/weixin_49131718/article/details/126147142
    • 最新文章
    • 攻防演习之三天拿下官网站群
      数据安全治理学习——前期安全规划和安全管理体系建设
      企业安全 | 企业内一次钓鱼演练准备过程
      内网渗透测试 | Kerberos协议及其部分攻击手法
      0day的产生 | 不懂代码的"代码审计"
      安装scrcpy-client模块av模块异常,环境问题解决方案
      leetcode hot100【LeetCode 279. 完全平方数】java实现
      OpenWrt下安装Mosquitto
      AnatoMask论文汇总
      【AI日记】24.11.01 LangChain、openai api和github copilot
    • 热门文章
    • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
      奉劝各位学弟学妹们,该打造你的技术影响力了!
      五年了,我在 CSDN 的两个一百万。
      Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
      面试官都震惊,你这网络基础可以啊!
      你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
      心情不好的时候,用 Python 画棵樱花树送给自己吧
      通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
      13 万字 C 语言从入门到精通保姆级教程2021 年版
      10行代码集2000张美女图,Python爬虫120例,再上征途
    Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
    正则表达式工具 cron表达式工具 密码生成工具

    京公网安备 11010502049817号