iterationjia

JAVA进阶

1 java8 新特性

  • Lambda 表达式 − Lambda允许函数作为参数传递进方法中。
  • 默认方法 — 接口提供已被实现的默认方法,默认方法可以被实现类选择override。
  • 重复注解 —允许在同一个地方多次使用同一个注解,用@Repeatable注解定义重复注解。
  • Date Time API − 加强对日期与时间的处理。
  • Optional 类 − 用来解决空指针异常。

2 Java集合类型

List(有序、可重复),Set(无序、不能重复),Map(键值对,键唯一、值不唯一)

  • ArrayList和LinkedList区别

    • ArrayList顺序存储,底层用数组实现,查找快,但是在中间插入删除麻烦;
    • LinkedList链式存储,本质是一个双向链表,插入删除很方便。实现了List、Deque接口,可以当成双向链表、队列、栈使用。
  • HashSet与TreeSet区别

    • 判断重复元素的时候,Set集合会调用hashCode()和equal()方法来实现
    • HashSet是哈希表结构,底层由HashMap来实现,主要利用HashMap的key来存储元素,计算插入元素的hashCode来获取元素在集合中的位置;
    • TreeSet是红黑树结构,每一个元素都是树中的一个节点,插入的元素都会进行排序;
  • HashMap和TreeMap区别

    • HashMap基于hash表实现,是通过hashcode()对其内容进行快速查找的;适用于Map插入,删除,定位元素;
    • TreeMap基于红黑树实现,所有的元素都是有某一固定顺序的;适用于按顺序遍历
      • 红黑树的插入、删除、遍历时间复杂度都为O(lgN),所以性能上低于哈希表。但是哈希表无法提供键值对的有序输出,红黑树因为是排序插入的,可以按照键的值的大小有序输出。红黑树性质

3 HashMap

HashMap

4 Java是否支持多继承

Java中类不支持多继承,只支持单继承(即一个类只有一个父类)。 但是java中的接口支持多继承,,即一个子接口可以有多个父接口。

5 StringBuffer和StringBuilder有什么区别,底层实现上呢?

StringBuffer线程安全,StringBuilder线程不安全,底层实现上的话,StringBuffer其实就是比StringBuilder多了Synchronized修饰符。

6 面向对象的"六原则一法则"

单一职责原则:一个类只做它该做的事情

开闭原则:软件实体应当对扩展开放,对修改关闭

依赖倒置原则:面向接口编程(声明方法的参数类型、方法的返回类型、变量的引用类型时,尽可能使用抽象类型而不用具体类型,因为抽象类型可以被它的任何一个子类型所替代)

里氏替换原则:任何时候都可以用子类型替换掉父类型

隔离接口原则:接口小而专,不能大而全

聚合复用原则:优先使用聚合关系复用代码

迪米特法则:一个对象应当对其他对象有尽可能少的了解。(只和直接的朋友交流)

7 Object若不重写hashCode()的话,hashCode()如何计算出来的?

Object 的 hashcode 方法是本地方法,也就是用 c 语言或 c++ 实现的,该方法直接返回对象的 内存地址。

8 为什么重写equals还要重写hashcode

HashMap中,如果要比较key是否相等,要同时使用这两个函数!

因为自定义的类的hashcode()方法继承于Object类,其hashcode码为默认的内存地址,这样即便有相同含义的两个对象,比较也是不相等的。

HashMap中的比较key是这样的,先求出key的hashcode(),比较其值是否相等,若相等再比较equals(),若相等则认为他们是相等的。若equals()不相等则认为他们不相等。

如果只重写hashcode()不重写equals()方法,当比较equals()时只是看他们是否为同一对象(即进行内存地址的比较),所以必定要两个方法一起重写。HashMap用来判断key是否相等的方法,其实是调用了HashSet判断加入元素 是否相等。

重载hashCode()是为了对同一个key,能得到相同的Hash Code,这样HashMap就可以定位到我们指定的key上。重载equals()是为了向HashMap表明当前对象和key上所保存的对象是相等的,这样我们才真正地获得了这个key所对应的这个键值对。

9 请解释hashCode()和equals()方法有什么联系

Java对象的equals方法和hashCode方法是这样规定的:

➀相等(相同)的对象必须具有相等的哈希码(或者散列码)。

➁如果两个对象的hashCode相同,它们并不一定相同。

10 Object类的方法并简要说明

Object()默认构造方法。

clone() 创建并返回此对象的一个副本。

equals(Object obj) 指示某个其他对象是否与此对象“相等”。

finalize()当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。

getClass()返回一个对象的运行时类。

hashCode()返回该对象的哈希码值。

notify()唤醒在此对象监视器上等待的单个线程。 notifyAll()唤醒在此对象监视器上等待的所有线程。

toString()返回该对象的字符串表示。

wait()导致当前的线程等待,直到 其他线程调用此对象的 notify() 方法或 notifyAll() 方法。wait(long timeout)导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量。wait(long timeout, int nanos) 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。

11 TreeMap的底层实现

TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点。

红黑树的插入、删除、遍历时间复杂度都为O(lgN),所以性能上低于哈希表。但是哈希表无法提供键值对的有序输出,红黑树因为是排序插入的,可以按照键的值的大小有序输出。

红黑树性质:

性质1:每个节点要么是红色,要么是黑色。

性质2:根节点永远是黑色的。

性质3:所有的叶节点都是空节点(即 null),并且是黑色的。

性质4:每个红色节点的两个子节点都是黑色。(从每个叶子到根的路径上不会有两个连续的红色节点)

性质5:从任一节点到其子树中每个叶子节点的路径都包含相同数量的黑色节点。

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-09
  • 2021-12-06
  • 2021-09-13
  • 2021-10-25
  • 2022-01-01
猜你喜欢
  • 2022-01-17
  • 2022-01-17
  • 2021-12-23
  • 2021-12-17
  • 2021-05-30
  • 2021-10-29
相关资源
相似解决方案