本期深入解析:String, Stringbuffer,StringBuiler 的区别,重载和重写的区别,接口和抽象类的区别,List 和 Set,ArrayList 和 LinkedList

String, Stringbuffer,StringBuiler 的区别

  1. String 是不可变的,如果尝试修改,会生成一个新的字符串,StringBuffer 和 StringBuiler是可变的
  2. StringBuilder 的底层没有锁

StringBuffer的底层都加了同步锁,所以StringBuffer的线程是安全的

重载和重写的区别

重载:发生在同一个类中,方法名必须相同,参数类型不同,个数不同,顺序不同,方法返回值和方法修饰符可以不同

重写:发生在父子类中,方法名,参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符大于等于父类,如果父类方法访问修饰符为private 则子类就不能重写该方法

接口和抽象类的区别

  1. 抽象类可以存在普通成员函数,而接口中只能存在public abstract 方法
  2. 抽象类的成员变量可以是各种类型的,而接口中的成员方法只能是public static final
  3. 抽象类只能继承一个,接口可以实现多个

接口的设计目的:是一种对类的行为进行约束,也就是一种机制,可以强制要求不同的类具有相同的行为。它可以强制要求不同的类具有相同的行为,它只是约束了行为的有无,但对如何实现不做限制

抽象类的设计目的:是为了代码复用,当不同的类具有某些相同的行为的时候。将子类的共性抽成一个父类。抽象类不允许被实例化,否则抽象方法里面没有代码无法执行

抽象类的功能是远高于接口的,但是定义抽象类的代价高,因为抽象类只能继承一个,

List 和 Set

List: 有序,按对象进入的顺序保存对象,可重复,允许多个null元素对象,可以使用iterator取出所有元素,再逐一遍历,还可以使用get(int index)获取指定下标元素

Set: 无序,不可重复,最多允许有一个null元素存在,取元素的时候只能用iterator接口取所有元素再逐一遍历

ArrayList 和 LinkedList

ArrayList 底层实现的是数组,它的add方法可以向指定位置插入数据,但是底层会进行数组下表的移动,速度较慢,System.arrayCopy

LinkedList 底层是链表,实现的是DeQueue接口,是一种双头数组,它进行add插入的时候,因为是链表的结构,每次都需要取遍历,所以不适合插入操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值