集合和数组的区别

  • 数组是固定长度的;集合可变长度的。
  • 数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。
  • 数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。

常用的集合类有哪些?

Map接口和Collection接口是所有集合框架的父接口:

  1. Collection接口的子接口包括:Set接口和List接口
  2. Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等
  3. Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等
  4. List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等

List,Set,Map三者的区别?

Java集合面试题 - 图1

集合框架底层数据结构

Collection

  1. List
    • Arraylist: Object数组
    • Vector: Object数组
    • LinkedList: 双向循环链表
  2. Set
    • HashSet(无序,唯一):基于 HashMap 实现的,底层采用 HashMap 来保存元素
    • LinkedHashSet: LinkedHashSet 继承与 HashSet,并且其内部是通过 LinkedHashMap 来实现的。有点类似于我们之前说的LinkedHashMap 其内部是基于 Hashmap 实现一样,不过还是有一点点区别的。
    • TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树。)

Map

  • HashMap: JDK1.8之前HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)。JDK1.8以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间
  • LinkedHashMap:LinkedHashMap 继承自 HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成。另外,LinkedHashMap 在上面结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序相关逻辑。
  • HashTable: 数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的
  • TreeMap: 红黑树(自平衡的排序二叉树)

接口与抽象类的区别

对比 接口 抽象类
声明 用interface声明接口 用abstract class声明抽象类
成员变量 静态常量 普通成员变量
方法 只有公共、抽象方法 都可以
实现/继承 一个类可以实现多个接口 一个类只能继承一个抽象类
构造方法 无,不能实例化 有,但不能实例化
实现 default方法可以有默认实现 要实现抽象方法

方法的重写与重载

重写是在子类继承父类方法的同时如果父类方法不能完全满足需求就需要重写父类方法。要重写父子类的方法参数要一样,返回类型也要一样,子类访问权限不能高于父类。

重载就是方法名相同但是参数不同返回类型修饰符都可以不同,用统一方式处理不同数据类型,不同参数。