Java笔试面试题整理第三波

本文整理了Java笔试面试中常见的知识点,包括String的split方法、hashCode方法的注意事项、Override与Overload的区别、ArrayList、Vector、LinkedList的特性,以及String、StringBuffer、StringBuilder的对比,还有Map、Set、List、Queue、Stack的基础概念和用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(本系列同步更新于 个人博客小站
本系列整理Java相关的笔试面试知识点,其他几篇文章如下:


1、String的split(String regex)方法参数注意点

使用这个方法时,当我们直接以“.”为参数时,是会出错的,如:
String str = "12.03";
String[] res = str.spilt(".");    //出错!!!
此时,我们得到的res是为空的(不是null),即str = [];
因为String的split(String regex)根据给定的正则表达式的匹配来拆分此字符串,而"."是正则表达式中的关键字没有经过转义split会把它当作一个正则表达式来处理的需要写成str.split("\\.")进行转义处理。

2、关于hashCode方法

    【参考文章:
    】
    我们可以先通过HashMap中hashCode的作用来体验一下。
    我们知道HashMap中是不允许插入重复元素的,如果是插入的同一个元素,会将前面的元素给覆盖掉,那势必在HashMap的put方法里对key值进行了判断,检测其是否是同一个对象。其put源码如下:     
  public V put(K key, V value) {
        if (table == EMPTY_TABLE) {    //key的hashCode值放在了table里面
            inflateTable(threshold);
        }
        if (key == null)
            return putForNullKey(value);
        int hash = hash(key);    //计算我们传进来的key的hashcode值
        int i = indexFor(hash, table.length);
        for (Entry<K,V> e = table[i]; e != null; e = e.next) {
            Object k;
            if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {    //将传进来的key的hashcode值于HashMap中的table里面存放的hashCode值比较
                V oldValue = e.value;
                e.value = value;
                e.recordAccess(this);
                return oldValue;
            }
        }
        modCount++;
        addEntry(hash, key, value, i);
        return null;
    }
    可以看到这里的判断语句 if (e.hash == hash && ((k = e.key) == key || key.equals(k))),里面通过&&逻辑运算符相连,先判断e.hash == hash,即判断传进来的key的hashCode值与table中的已有的hashCode值比较,如果不存在该key值,也就不会再去执行&&后面的equals判断;当已经存在该key值时,再调用equals方法再次确定两个key值对象是否相同。从这里可以看出,hashCode方法的存在是为了减少equals方法的调用次数,从而提高程序效率。
    可以看到,判断两个对象是否相同,还是要取决于equals方法,而两个对象的hashCode值是否相等是两个对象是否相同的必要条件。所以有以下结论:
    (1)如果两个对象的hashCode值不等,根据必要条件理论,那么这两个对象一定不是同一个对象,即他们的equals方法一定要返回false;
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值