【面试】Java基础篇(二)

一、方法操作

1、== 和 Equals的区别?

== :基本数据类型:比较值;引用数据类型:比较对象的(堆)内存地址内存。

equals :默认是引用比较,很多类(String、Integer)重写 equals,变成了值比较。

// 举例:
public class StringDemo {
    public static void main(String args[]) {
        String str1 = "Hello";
        String str2 = new String("Hello");  // 开辟新的堆内存
        String str3 = str2; // 引用传递
        System.out.println(str1 == str2); // false
        System.out.println(str1 == str3); // false
        System.out.println(str2 == str3); // true
        System.out.println(str1.equals(str2)); // true
        System.out.println(str1.equals(str3)); // true
        System.out.println(str2.equals(str3)); // true
    }
}

2、Java有个最基本的类Object,这个类默认包含哪几个方法?

函数名功能
registerNatives()对本地方法进行注册
getClass()返回一个对象的运行时类
hashCode()返回该对象的哈希值
equals()指示某个其他对象是否与此对象相等
clone()创建并返回此对象的一个副本
toString()返回该对象的字符串表示
notify()唤醒此对象监视器上等待的单个线程
notifyAll()唤醒此对象监视器上等待的所有线程
wait(long)导致当前线程等待调用此对象的notify()或notifyAll()
wait(long,int)导致当前线程等待,直到其他线程调用此对象的notify()或notifyAll(),或其他某个线程中断当前线程,或已经超过某个实际时间量
wait()导致当前线程等待,直到其他线程调用此对象的notify()或notifyAll()
finalize()当垃圾回收确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法
Object()默认构造方法

3、对比Vector、ArrayList、LinkedList有何区别?【第8讲】(*2):存储,线程,扩容

对象存储线程扩容
Vector动态数组Y100%
ArrayList动态数组N50%
LinkedList双向链表N-

追问1:各自应用场景是什么?

Vector 和 ArrayList 以数组形式顺序存储,所以非常适合随机访问
LinkedList 进行插入、删除很高效,但随机访问比动态数组慢。

4、对比Hashtable、HashMap、TreeMap有什么不同?【第9讲】(*6)

Hashtable同步的哈希表实现,不支持 null 键和值。同步让开销更大,很少使用。

HashMap不同步的哈希表实现,支持 null 键和值等。put、get 操作通常可达到常数时间性能,是绝大部分键值对存取首选。

TreeMap 是基于红黑树的一种提供顺序访问Mapget、put、remove 类操作时间复杂度是 O(logn),具体顺序由 指定Comparator 或 键的自然顺序 来决定。

补充:
1、相同:都是 Map 实现,是以键值对形式存储和操作数据的容器类型。
2、容器:存储元素的单元。这样来看,数据类型都是容器。
3、线程同步:多线程操作一个资源导致资源不一致,这需要协调资源的调度,即线程同步。
4、线程安全:多线程访问类X时,X都表现正确行为,则X是线程安全。 线程安全类封装了同步机制。

追问1:HashMap系列……

回答详解见:【面试】HashMap常见面试题

5、HashSet底层实现?

在HashMap上包了一层,默认存储一个Object的静态常量,取时候也是只返回key。其中add方法调用HashMap的put()方法实现。

if key is existed, then 是旧值,失败;
if (map.put()==null), then 添加元素作为map.key

追问1:线程安全吗?

不安全,同HashMap。

二、参考

1、Java语法----Java中equals和==的区别
2、你真的懂 == 和 equals 的区别吗?
3、为什么重写了equals()也要重写hashCode()
4、重写equals方法后重写hashCode方法的必要性
5、手机号段正则表达式 (2019-01 最新)
6、正则表达式 - 语法
7、【疑惑整理】【Java】深入浅出HashMap+面试整理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值