zoukankan      html  css  js  c++  java
  • Java

    本章学习,记住: 1 1 3 6(一张图、一个类、三个知识点、六个接口)

     

     

    主要内容:

     

     

     

     

     

    容器的概念:

     

     

     

     

     

    容器 API:

     

     

     

     

     

    Collection 接口:

     

     

    重写 equals 方法,你应该也重写 hashCode 方法,这是为了程序执行效率着想!!!

    补充说明:

    Java中equals()和hashCode()有一个契约:

    1. 如果两个对象相等的话,它们的hash code必须相等; (当对象被用做索引时,在比较其是否相等时,就会优先判断hashCode(),如果hashCode()都不相等,就不会去调用equals(),相当于:( A.hashCode()==B.hashCode() ) && ( A.equals(B) ),有短路效果!!!

    2. 但如果两个对象的hash code相等的话,这两个对象不一定相等。

    1、自定义一个 hashCode() 方法是一个比较麻烦的事,与其不如用现成的,上图中实现 hashCode 方法就是用的 String 类已经实现了的,具体怎么实现我不去管它,Sun 公司已经帮我写好了。

    2、有人又问了,Que:不是已经有 equals 方法了吗?为什么还要重写 hashCode 方法呢?Ans:若 equals 中比较的条件比较多或者比较的算法比较繁琐,这时用 equals 一个一个的比较,效率会很低,若先直接拿它 hashCode来作比较会增加比较的速度(附述一点:sun规定相等的对象应该具有相等的hash codes,这是前提,如上图红色标记!所以说如果hashCode都不相等就没有比较equals的必要了)。

    3、有人又问了,Que:在什么时候使用这个hashCode 方法呢?Ans:当这个类的某个对象被当做索引(也就是key)的时候,一旦涉及到元素比较,Java运行时系统会优先调用hashCode方法进行比较,只有在hashCode相等的情况下,再去调用equlas方法进行比较,所以这样做效率大大的提升。

    4、上图例子中重写java.lang.Object类的hashCode方法后,是用的Name类的firstName成员变量的hashCode作为hashCode返回(也就说我现在规定Name 类所new出来的实例对象之间判断是否相等的先决条件为:它们的firstName的hashCode一样),也可以规定多个(如果你想要把firstName和lastName的hashCode都一样视为相等的先决条件,这时返回值可以采用return firstName.hashCode() + lastName.hashCode();多个依此类推,把它们的hashCode全部相加,一并返回)。

    5、所以有这样的总结:当类的对象做为索引时,需要比较类的两个实例是否一样:调用hashCode方法的优先级要比调用equlas方法高,编程时,hashCode相等一般为先决条件(先决条件:这里就要考虑返回哪些成员变量的hashCode之和了),只有在先决条件满足的情况下Java运行时系统才会调用equals方法,所以说equals的比较条件应该比hashCode的比较条件更为严格(至少要hashCode一样)。

     

     

     

     

     

     

    Iterator 接口:

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    补充说明:这里的copy方法是将src容器中的元素下标0开始替换到dest容器中(dest容器中相应下标的位置的元素会被覆盖),而不是附加在dest之后;所有必须dest.size() > src.size(),否则抛出IndexOutOfBoundsException例外

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     map的key如果是字符型,识别大小写

     

     

     

    Map 示例程序:统计不同的单词,并记录相同单词出现的次数

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     
     
  • 相关阅读:
    华为oj之字符串分割
    华为oj之字符个数统计
    华为oj之等差数列前n项和
    华为oj之质数因子
    华为oj之求int型正整数在内存中存储时1的个数
    华为oj之字符串反转
    SpringBoot--表单验证
    SpringBoot--异常统一处理
    SpringBoot--文件上传
    SpringBoot--thymeleaf
  • 原文地址:https://www.cnblogs.com/andremao/p/7860564.html
Copyright © 2011-2022 走看看