首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin学习笔记(七)-泛型

本篇还是和反射一样,从实际代码编写角度,说下Kotlin的泛型 逆变与协变 泛型的逆变与协变其其在Java中也有。简单概括来说就是实现了泛型的协变,<?...,为只读类型, 它的子类的泛型参数的类型是父类的泛型参数类型的子类,也就是说泛型参数的继承关系与类的继承关系保持一致(所以叫协变),比如Number是Int的父类 那么List也是List...它的泛型参数的继承关系与类的继承关系相反,比如父类是Any,子类是Int。...不变 类型必须保持一致 泛型之间没有关系 val mutableList: MutableList = mutableListOf(1, 2, 3) 星投影 其本质就是类似Java...0 // } // } // val hello=Hello//ERROR 因为泛型实参时不能用*代替 //java 是可以有弱类型的(目的是兼容1.5) Kotlin

66220
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【面试题精讲】Comparable 和 Comparator 的区别

    1. 什么是Comparable和Comparator? Comparable接口是Java中的一个接口,用于定义对象之间的自然排序规则。...它包含一个方法compare(Object obj1, Object obj2),该方法用于比较两个对象obj1和obj2的大小关系。 2....Comparable的实现原理? 当一个类实现了Comparable接口后,就必须实现其中的compareTo方法。该方法返回一个整数值,表示当前对象与传入对象的大小关系。...compareTo方法的返回值有以下三种情况: 如果当前对象小于传入对象,则返回负数; 如果当前对象等于传入对象,则返回0; 如果当前对象大于传入对象...compare方法的返回值也有以下三种情况: 如果第一个对象小于第二个对象,则返回负数; 如果第一个对象等于第二个对象,则返回0; 如果第一个对象大于第二个对象

    27440

    (36) 泛型 (中) - 解析通配符 计算机程序的思维逻辑

    通配符有着令人费解和混淆的语法,但通配符大量应用于Java容器类中,它到底是什么?本节,让我们逐步来解析。...它们用的地方不一样,我们解释一下: 用于定义类型参数,它声明了一个类型参数T,可放在泛型类定义中类名后面、泛型方法返回值前面。 src){ for(int i=0; i<src.size(); i++){ dest.add(src.get(i)); } } 通配符与返回值...以前面计算最大值的方法为例,它的方法声明是: public static Comparable> T max(DynamicArray arr) 这个声明有什么限制呢?...我们可能会认为,Java会将max方法的类型参数T推断为Child类型,但类型T的要求是extends Comparable,而Child并没有实现Comparable,它实现的是Comparable

    69680

    5 分钟搞定 Java Comparable 接口

    在这篇文章中,我们要聊一聊Java Comparable接口。...例1 我们要怎样对它们进行排序呢?我们希望通过重量进行排序吗?如果是的话,排序是从最轻到最重还是从最重到最轻?当我们对它们进行排序的时候,我们需要反复比较两个苹果的重量,直到正确地排好所有的苹果。...在第二个if语句中,我们要说明,如果苹果重量相等,那么返回一个0。当然,如果这个苹果既不是更轻,又不是一样重,那就只能比其他苹果更重了。在这种情况下,我们返回一个正数,假定为1。...结论 在结论中我只想强调Comparable接口是多么的重要。它既用于java.util.Arrays,也用于java.util.Collections实用程序类,来排序元素和搜索排序集合中的元素。...使用TreeSet和Tree Map,就更简单了——想要它们会自动排序必须实现Comparable接口的元素。

    50251

    Java中的比较器Comparable与Comparator

    Java实现对象排序的方式有两种: 自然排序:java.lang.Comparable 定制排序:java.util.Comparator 自然排序:java.lang.Comparable Comparable...接口强行对实现它的每个类的对象进行整体排序。...实现 Comparable 的类必须实现 compareTo(Object obj)方法,两个对象即通过 compareTo(Object obj) 方法的返回值来比较大小。...使用背景: 当元素没有实现java.lang.Comparable接口而又不方便改代码,或者是实现了Comparable接口,也指定了两个对象的比较大小的规则,但此时不想按照预定义的方法比较大小。...重写compare(Object o1,Object o2)方法,比较o1和o2的大小:如果方法返回正整数,则表示o1大于o2;如果返回0,表示相等;返回负整数,表示o1小于o2。

    76420

    10.TreeSet、比较器

    Comparable 定义 Comparable 接口仅仅只包括一个函数,它的定义如下: 代码如下: package java.lang; import java.util.*; public interface...底层数据结构是二叉树。保证元素唯一性的依据:compareTo方法return 0....4、保证元素唯一性的依据: 实现的compareTo方法的返回值,是正整数、负整数或零,则两个对象较大、较小或相同。相等时则不会存入。...上面这种方式是元素本身就具备比较性,但是要是没有具备比较性那么我们就必须自己去实现comparable接口去重写compareTo方法,自己建立需要的比较性。根本不看hashcode和equals....Java String.compareTo(),此方法如果这个字符串是等参数字符串那么返回值0,如果这个字符串是按字典顺序小于字符串参数那么返回小于0的值,如果此字符串是按字典顺序大于字符串参数那么一个大于

    1K100

    【21期】你能说说Java中Comparable和Comparator的区别吗

    如果add进入一个Collection的对象想要Collections的sort方法帮你自动进行排序的话,那么这个对象必须实现Comparable接口。...compareTo方法的返回值是int,有三种情况: 比较者大于被比较者,返回正整数 比较者等于被比较者,返回0 比较者小于被比较者,返回负整数 写个很简单的例子: public class Domain...)); } 运行结果为: 0 1 -1 注意一下,前面说实现Comparable接口的类是可以支持和自己比较的,但是其实代码里面Comparable的泛型未必就一定要是Domain,将泛型指定为String...---- Comparator Comparator接口里面有一个compare方法,方法有两个参数T o1和T o2,是泛型的表示方式,分别表示待比较的两个对象,方法返回值和Comparable接口一样是...不同之处: 个人感觉说出上文观点,这个提问就算回答完了,如果非要说不同之处,那就是: Comparator位于java.util包下,而Comparable位于java.lang包下 实现Comparable

    34340

    Java Collections Framework - Java集合框架之概要

    这时,你必须判断该元素是否已经存在于该哈希表中。  如果哈希码是合理地随机分布的,并且哈希表元的数量足够大,那么哈希冲突的数量就会减少。...(1) int compareTo(Object o): 比较当前实例对象与对象o,如果位于对象o之前,返回负值,如果两个对象在排序中位置相同,则返回0,如果位于对象o后面,则返回正值  在 Java...(1)int compare(Object o1, Object o2): 对两个对象o1和o2进行比较,如果o1位于o2的前面,则返回负值,如果在排序顺序中认为o1和o2是相同的,返回0,如果o1位于...o2的后面,则返回正值  “与Comparable相似,0返回值不表示元素相等。...一个0返回值只是表示两个对象排在同一位置。由Comparator用户决定如何处理。如果两个不相等的元素比较的结果为零,您首先应该确信那就是您要的结果,然后记录行为。”

    76230

    你能说说Java中Comparable和Comparator的区别吗

    如果add进入一个Collection的对象想要Collections的sort方法帮你自动进行排序的话,那么这个对象必须实现Comparable接口。...compareTo方法的返回值是int,有三种情况: 比较者大于被比较者,返回正整数 比较者等于被比较者,返回0 比较者小于被比较者,返回负整数 写个很简单的例子: public class Domain...)); } 运行结果为: 0 1 -1 注意一下,前面说实现Comparable接口的类是可以支持和自己比较的,但是其实代码里面Comparable的泛型未必就一定要是Domain,将泛型指定为String...Comparator Comparator接口里面有一个compare方法,方法有两个参数T o1和T o2,是泛型的表示方式,分别表示待比较的两个对象,方法返回值和Comparable接口一样是int...不同之处: 个人感觉说出上文观点,这个提问就算回答完了,如果非要说不同之处,那就是: Comparator位于java.util包下,而Comparable位于java.lang包下 实现Comparable

    8010

    5 分钟搞定 Java Comparable 接口

    如果是的话,排序是从最轻到最重还是从最重到最轻?当我们对它们进行排序的时候,我们需要反复比较两个苹果的重量,直到正确地排好所有的苹果。苹果1比苹果2重?那它比苹果3重吗?...例2 compareTo()方法的工作原理是返回一个int值——或正,或负,或为零。它通过调用作为参数的对象来比较对象。负数表示调用的对象比参数“轻”。...在第二个if语句中,我们要说明,如果苹果重量相等,那么返回一个0。当然,如果这个苹果既不是更轻,又不是一样重,那就只能比其他苹果更重了。在这种情况下,我们返回一个正数,假定为1。...结论 在结论中我只想强调Comparable接口是多么的重要。它既用于java.util.Arrays,也用于java.util.Collections实用程序类,来排序元素和搜索排序集合中的元素。...使用TreeSet和Tree Map,就更简单了——想要它们会自动排序必须实现Comparable接口的元素。

    67610

    Comparable接口和Comparator接口

    Exception in thread "main" java.lang.ClassCastException: Student cannot be cast to java.lang.Comparable...: // 0: 表示 o1 指向的对象小于 o2 指向的对象 // == 0: 表示 o1 指向的对象等于 o2 指向的对象 // > 0: 表示 o1 指向的对象等于 o2 指向的对象 int compare...o2) => int 表示o1和o2的大小关系: 返回值 >0 :o1> o2 返回值 =0 :o1 = o2 返回值0 :o < o2 当把Student类的大小关系比较从Student类中“...如果传入list和coparator的话,就会调用compare()方法 3.2 区别 Comparable接口位于java.lang包下,Comparator位于java.util包下 Comparable...如果要用Comparable接口,则必须实现这个接口,并重写compareTo()方法【一个参数】;但是Comparator接口可以在类外部使用,通过将该接口的一个匿名类对象当做参数传递给Collections.sort

    64620

    【Java】基础26:集合比较器

    现在有几个非常简单的需求: 求两个整数之和; 求三个整数之和; 求四个整数之和; 按照我目前所学到的Java知识,我会这样解决: 创建方法一,参数为两个int,返回值为它们之和。...三、比较器 Java里面有两个比较器:Comparator和Comparable。...③如何判断升序还是降序? o1-o2,可以记成,1到2,就是升序; o2-o1,可以记成,2到1,就是降序。 我们要求是要比较年龄大小并降序排列, 所以是:o2.age-o1.age。...2.Comparable Comparable也是一个接口,它的作用也是可以自定义规则,但是它是在类中就把规则制定好了,直接就可以使用Collections的sort方法。...Comparable,这是一个形容词,不能直接拿来用,得用需要排序的类去实现它。 当然我这个说法不太准确,不过拿来理解区分它们还是可以的。 总结: ?

    68230

    【Java 基础篇】Java 自然排序:使用 Comparable 接口详解

    在 Java 编程中,我们经常需要对对象进行排序。为了实现排序,Java 提供了 java.lang.Comparable 接口,它允许我们定义对象之间的自然顺序。...自然排序通常是最直观和常见的排序方式,它使得对象在集合中以一种有序的方式存储和检索。 在 Java 中,自然排序是通过 Comparable 接口来实现的。...这个方法要求列表中的元素必须实现 Comparable 接口。...考虑降序排序:如果需要降序排序,可以在 compareTo 方法中适当调整返回值。 测试排序结果:始终测试排序结果以确保它符合您的预期。...自然排序的升序和降序:默认情况下,Comparable 接口实现的自然排序是升序排序。如果需要降序排序,可以在 compareTo 方法中适当调整返回值。

    1.2K30

    Effective Java(第三版)——条目十四:考虑实现Comparable接口

    相反,它是Comparable接口中的唯一方法。 它与Object类的equals方法在性质上是相似的,除了它允许在简单的相等比较之外的顺序比较,它是泛型的。...下面的描述中,符号sgn(expression)表示数学中的 signum 函数,它根据表达式的值为负数、零、正数,对应返回-1、0和1 1.实现类必须确保所有x和y都满足sgn(x.compareTo...2.实现类还必须确保该关系是可传递的:(x. compareTo(y) > 0 && y.compareTo(z) > 0)意味着x.compareTo(z) > 0 3.最后,对于所有的z,实现类必须确保...因为Comparable接口是参数化的,compareTo方法是静态类型的,所以你不需要输入检查或者转换它的参数。 如果参数是错误的类型,那么调用将不会编译。...今天小程序更新的题目是: 1.同步和异步的区别和联系 2. 什么叫脏数据 3.

    70720

    JavaSE(八)集合之Set

    4)将自定义类的对象存入HashSet去重复      类中必须重写hashCode()和equals()方法       hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同...TreeSet 实现了java.io.Serializable接口,意味着它支持序列化。     TreeSet是基于TreeMap实现的。...Exception in thread "main" java.lang.ClassCastException: com.zyh.domain.Person cannot be cast to java.lang.Comparable...当我们把返回值设置为1时: ?     图解: ?     当返回值是0时,张三作为二叉树的根,当我们其他的元素比较时,都返回0表示相同的对象。所以只会存储张三。     ...当返回值是-1时,张三作为二叉树的根,李四和它比较时,返回-1说明,李四小,挂在张三的左边。王五一进来也和张三比较返回-1,放在张三左边,在和李四比较返回-1,挂在李四左边,以此类推。

    99150

    Java都21啦,8的map你用熟悉了吗

    也就 5 个)小插曲这里简单介绍下 Comparable 和 Comparator 的区别 ,后面会提到可以看到一个是 java.lang 包的,一个是 util 包的。...return o1-o2; }}class C implements Comparable{ private final int num; public C(int...c2) -> c1.getKey().compareTo(c2.getKey());}一眼看过去,就觉得这个函数好复杂的样子下面来一步步解析~ 从函数名可以得知它的主要作用应该是 按照 key 自然排序再仔细看看它...,发现是一个 泛型方法 ,主要说明 K 的上限是 Comparable (K必须实现这个接口)再瞅瞅 return 语句中,居然有这么一个 & 符号(居然还能这么写), 猜测这里应该得同时实现 Comparator...但是要注意它的返回值 是旧值。

    27820

    Java学习【深入探索包装类和泛型】

    在Java的学习中,包装类和泛型是两个重要的概念,它们不仅丰富了Java的数据类型,还提高了代码的可读性和安全性。下面,我们将深入探讨这两个主题。...包装类 包装类是Java提供的一种特殊类,它们将Java的基本数据类型(如int、double、char等)封装成对象。这样做的好处是可以将基本数据类型作为对象来处理,使用对象所特有的属性和方法。...; 除了 Character,都有对应的转换方法 泛型 在Java编程中,泛型是一个强大的工具,它允许我们在编写代码时定义灵活的、可重用的结构,而无需关心具体的数据类型。..."AA"); myArray.set(1,1); String s = (String) myArray.get(0);//因为返回的是Object类型,所以需要强制类型转换...接口 public class AlgComparable> { //对泛型进行了限制,必须实现Comparable接口的类型才能传入 public E findMax

    6910
    领券