Java学习(九)

    xiaoxiao2025-03-15  11

    Java学习(九)

    目录:

    1、equals、hashCode、compareTo方法:

    2、Comparable接口的compareTo方法说明:

    3、TreeMap是一个按照key排序的键值对集合,比较规则根据key的compareTo()方法进行排序。

    4、List、Set、Map简单说明:

    5、Map<String, Integer> m = new HashMap<String, Integer>()的一些解释:

    6、hashCode和equals方法重写学习:

    7、TreeMap学习:

    8、HashMap学习:

    1、equals、hashCode、compareTo方法:

    答:(1)equals方法和hashCode方法保持一致:在同一次运行,当equals方法返回true时,hashcCode方法返回同一个整数。

    (2)equals方法对于任何非空引用值x和y,当且仅当x和y引用同一个对象时,此方法才返回true。当此方法被重写时,通常有必要重写hashCode方法,以维护hashCode方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

    (3)equals方法和compareTo方法保持一致:当且仅当equlas方法返回true时,compareTo方法返回零。

     

    2、Comparable接口的compareTo方法说明:

    答:比较此对象与指定对象的顺序。如果该对象小于指定对象,则返回一个负整数;如果该对象等于指定对象,则返回零;如果该对象大于指定对象,则返回一个正整数。如果指定对象的类型不允许它与此对象进行比较,则会抛出ClassCastException。

     

    3、TreeMap是一个按照key排序的键值对集合,比较规则根据key的compareTo()方法进行排序。

     

    4、List、Set、Map简单说明:

    答:List是链表结构,Set都是不包含重复元素的集合,Map都是key-value结构。key的底层就是一个set(不包含满足e1.equals(e2) 的元素对e1 和e2)。

     

    5、Map<String, Integer> m = new HashMap<String, Integer>()的一些解释:

    答:HashMap类实现了Map接口,相当于HashMap类继承了Map抽象类

    因为Map接口是不能被实例化的,所以需要对此类型实例化时,可以对它的某个实现类进行实例化,即面向对象中的多态的概念。定义一个Map 类型的对象m,这个对象是一个新的HashMap 实例。

     

    6、hashCode和equals方法重写学习:

    ①代码示例:

     

    图6.1 代码示例1

     

    图6.2 代码示例2

    ②运行结果:

     

    图6.3 运行结果

     

    7、TreeMap学习:

    (1)TreeMap<K, V>继承关系

    java.lang.Object

    --------java.util.AbstractMap<K, V>

    ----------------java.util.TreeMap<K, V>

    K:此映射维护的键的类型

    V:映射值的类型

    (2)方法学习:

    ①代码示例如下:

     

    图7.1 代码示例

    ②运行结果:

     

    图7.2 运行结果

     

    8、HashMap学习:

    (1)HashMap<K, V>继承关系

    java.lang.Object

    --------java.util.AbstractMap<K, V>

    ----------------java.util.HashMap<K, V>

    K:此映射维护的键的类型

    V:映射值的类型

    (2)注意事项:

    ①HashMap 的实例有两个参数影响其性能:初始容量和加载因子。容量是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。加载因子是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行rehash 操作(即重建内部数据结构),从而哈希表将具有大约两倍的桶数。

    ②通常,默认加载因子 (0.75) 在时间和空间成本上寻求一种折衷。加载因子过高虽然减少了空间开销,但同时也增加了查询成本。在设置初始容量时应该考虑到映射中所需的条目数及其加载因子,以便最大限度地减少rehash 操作次数。如果初始容量大于最大条目数除以加载因子,则不会发生rehash 操作。

    (3)方法学习示例1:

    ①代码示例如下:

     

    图8.1 代码示例

    ②运行结果:

     

    图8.2 运行结果

    说明:散列映射并不保证它的元素的顺序。因此,元素加入散列映射的顺序并不一定是它们被迭代函数读出的顺序。

    (4)方法学习示例2:

    ①代码示例:

    在eclipse中给main函数的args参数赋值:

     

    图8.3 传参示例

     

    图8.4 代码示例

    ②运行结果:

     

    图8.5 运行结果

    (5)知识点总结:

    ①HashMap底层维护一个数组,我们向HashMap中所放置的对象实际上是存储在该数组当中;

    ②当向HashMap中put一对键值时,它会根据key的hashCode值计算出一个位置,该位置就是此对象准备往数组中存放的位置。

    ③如果该位置没有对象存在,就将此对象直接放进数组当中;如果该位置已经有对象存在了,则顺着此存在的对象的链开始寻找(Entry类有一个Entry类型的next成员变量,指向了该对象的下一个对象),如果此链上有对象的话,再去使用equals方法进行比较,如果对此链上的某个对象的equals方法比较为false,则将该对象放到数组当中,然后将数组中该位置以前存在的那个对象链接到此对象的后面。

    转载请注明原文地址: https://ju.6miu.com/read-1297049.html
    最新回复(0)