秋招知识点总结——基础部分02

    科技2022-07-13  128

    1.重写和重载

    重写(Override) 是指子类对父类方法的一种重写,只能比父类抛出更少的异常,访问权限不能比父类的小,被重写的方法不能是 private 的,否则只是在子类中重新定义了一个新方法。

    我们可以理解为将从父类中继承出来的方法进行了内容的修改,体现了多态的特点。

    重载(Overload) 表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同。参数不同体现在 参数类型不同、参数个数不同、参数顺序不同 三个方面。

    2.list、map、set 的区别

    首先我们要明确一点:List和Set存储单列数据,Map存储键值对这样的双列数据

    List

    list是我们最常用到的一类集合,list主要有三个实现类:

    ArrayList

    ArrayList 是我们常说的顺序表,他的底层实现是数组,因此他的查找快、效率高,支持下标查找,但是由于底层是数组,插入删除操作略显繁琐。

    LinkedList

    LinkedList 是我们常说的链表,他的底层实现是链表,因此他的存储是散列的,对空间要求不高,但是由于指针的存在,需要额外占用一部分空间作为指针;

    LinkedList 实现了 List 和 Deque 接口,一般称为双向链表;

    插入删除操作快,但是查找方面只能进行遍历查找,查找速度慢;

    Vector

    Vector是我们常说的容器,他的底层实现也是数组,因此他拥有和ArrayList类似的特性; 但是值得注意的是 他是三者中唯一一个线程安全的。

    Map

    Map类有四个实现类:

    HashMap

    hashmap是我们最常用的map类,他是基于hash表实现的,key,value 都支持 null值,但是鉴于key的唯一性,key最多只能有一个null值;

    hashmap是非线程安全的。

    HashTable

    hashtable是线程安全的,因为他给自己加了一把锁,但是由于为了确保线程安全,不得不牺牲部分效率。

    hashtable的键值对均不支持 null值

    ConcurrentHashMap

    最为常用的线程安全的hashmap,它结合了 HashMap 和 HashTable 二者的优势。

    ConcurrentHashMap 锁的方式是稍微细粒度的。 ConcurrentHashMap 将 hash 表分为 16 个桶(默认值),诸如get,put,remove 等常用操作只锁当前需要用到的桶。因此效率有了很大的提升(但是还是比非线程安全的hashmap慢)

    TreeMap

    TreeMap,能够把它保存的记录根据键排序,默认是键值的升序排序。

    Set

    set接口我们常用的就是HashSet、TreeSet

    HashSet 底层是由 HashMap 实现,不允许集合中有重复的值,使用该方式时需要重写 equals()和 hash Code()方法;

    TreeSet 能够把它保存的记录根据值排序,默认是值的升序排序。不允许出现 null值,可以通过实现 Java.util.Comparator< Type >接口来自定义排序方式。

    相关问题:Array 和 ArrayList 有什么区别?

    Array 可以包含基本类型和对象类型,ArrayList 只能包含对象类型。 Array 大小是固定的,ArrayList 的大小是动态变化的。 ArrayList 提供了更多的方法和特性,比如:addAll(),removeAll(),iterator() 等等。

    3.equals 和 == 的区别

    == 对于基本数据类型 比较的是 数据;但是对于引用类型 对比的是引用地址;

    equals() 无论是基本数据类型还是引用数据类型,比较的是对应的具体数据。

    Processed: 0.009, SQL: 8