个人面试简单总结

记录我的面试:

1.linklist(链表)和arraylist,vector:

     linklist是一条(动态的)链性结构,是一种双向的链表,他的存删(即保存,删除)性能比arraylist要好(注意:arraylist在末尾添加和删除数据是比linklist快的),但是在查询和修改数据的时候性能就不如arraylist了(原因:linklist查找数据每次都是从第一个数据向下便利,而arraylist是由下标的,能够根据下标直接找到数据),linklist的查询速度的三种方式和速度  ( foreach>迭代器>for语句),这里遗留一个问题(linklist会记录他的first和last位置,在这个位置上插入数据和arraylist相比那个更快)

    arraylist是一个(动态的)线性表结构,他的初始默认长度是10,最大长度是 Integer.MaxValue-8,每次扩容是是当前容量的1.5倍。

   vector大部分与arraylist相似,但vector的构造函数多了一个(可以指定初始值和扩容的长度),而且默认的扩容是当前容量的2倍,并且vector是线程安全的(因为vector的增加删除方法添加了synchronize关键字)相比之下 arraylist就不是啦

2.hashmap

   hashmap是map的实现类,线程不安全,他是一种线表和链表结合的模式,先取得key的hashcode,看map中是否有这个code,如果没有,直接把key和value放入线表中,若果有,则把key和value放入对应code的链表中(注意:如果链表的长度大于8,则将链表的结构变成红黑树结构(防止二叉树结构的在一条线上存,变相的又变成链表结构)

结构图:

红黑树:

防止hashmap形成链表的方法:使用final相识类的key  例如String(hashcode方法已重写)(code值不相同)

3.抽象类和接口

   抽象类是被abstract关键字修饰的类,意味着他的方法是可以没有实体的,普通类则不行,此外抽象类不能new。除此之外 抽象类与普通类并无太多区别,他们都可以有main方法可以执行,都可以有构造函数,都可以有public protect等修饰的方法和变量。

抽象类和接口的区别:

  (1)抽象类可有有实体的方法(可被public private等修饰),接口不行(抽象方法都只能是public)

       注意:抽象类实体方法可以不重写,但是抽象类和接口的抽象方法都必须全部重写

  (2)抽象类可继承抽象类并且实现其他接口,但接口只能实现接口

  (3)因为抽象的方法都必须重写,因为如果是只需要写一次的方法,最好使用抽象类可继承,而不是接口(其子实现都需要重写)

  (4)抽象类的变量是可以修改的,而接口中只能是常量(即被  final修饰  不允许修改)

  (5)设计层面上的区别:

            a.抽象类是抽象一个类别,即一个类别的行为,属性。例如  抽象出来一个人类的抽象类  里面包含了他的行为(吃穿住行)和属性(大概样子) , 而接口一般抽象一种或者多种行为  即  吃喝(动物都有)

            b.java继承和实现的区别要求  因为继承只能够单继承,而实现是多实现,而且抽象类可以有实体方法,因此,如果一种行为不需要改动,则抽象类比接口合适。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值