简单技术分享

*方法重写*

在Java中,子类继承父类,子类就会具备父类所以的特征,以及父类的方法和变量比如动物类有“叫”的方法,小狗小猫分别继承了动物类,重写方法时就可以分别将“叫”的方法改成“小狗汪汪叫”,“小猫喵喵叫”。

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

*方法重载*

方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数

方法重载通常用于创建完成一组任务相似但参数的类型或参数的个数或参数的顺序不同的方法。Java的方法重载,就是在类中可以创建多个方法,它们可以有相同的名字,但必须具有不同的参数,即或者是参数的个数不同,或者是参数的类型不同。调用方法时通过传递给它们的不同个数和类型的参数,以及传入参数的顺序来决定具体使用哪个方法。

方法重载发生在编译时。

Public int add(int a,int b)
Public String add(int a, int b)

上面的两个方法在编译时会发生错误,虽然两方法的方法名相同,返回值类型可以不同,但是两个方法中的参数a和b类型都一样,返回值类型却不同,所以会报错

String,StringBuffer,StringBuilder三者的区别

String是final修饰的,String的对象不可变,每次操作都会产生新的String对象,所以String修饰的常量是线程安全的。
StringBuffer和StringBuilder都是在原始创建的对象上操作的。StringBuffer和StringBuilder的相同点是他们都有公共父类AbstractStringBuilder抽象类。当调用StringBuffer和StringBuilder中的方法时,都会调用AbstractStringBuilder抽象类中的方法。
而StringBuffer和StringBuilder的不同点是StringBuffer是线程安全的,StringBuildel是线程不安全的,这是因为StringBuffer会在方法是添加synchronized锁
在性能方面,StringBuilder>StringBuffer>String
如果在使用时要改变字符串的内容,应使用前两个,在多线程使用共享变量时优先使用StringBuffer,因为其线程安全;在没有特殊情况下,优先使用StringBuilder,因为其效率高。

 ArrayList和LinkedList的区别

ArrayList

ArrayList是List接口的一个实现类,基于动态数组存储的,并且存储地址是连续的。因为ArrayList内部的存储形式是数组的形式,所以不适合做大量的增删操作(尤其是在中间插入或删除元素,因为后面的数组都要向前或向后移动),但是ArrayList在遍历和查找元素时效率很高

ArrayList适合下标访问,也适合随机访问,在进行随机的get,set方法调用时,ArrayList的效率比LinkedList效率高。当存入的元素超过了设定的ArrayList的长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,即新建数组,将旧的数组中的数据拷贝到新的数组中,如果不是尾插法,后面的数据都要移动

ArrayList list1 = new ArrayList();
list1.add("xiaowei");
List1.add("haoshuai");

对于上面的代码,当运行第一行,底层先创建了一个长度为0的数组,这是因为没有指定数组大小;当运行到第二行时,add第一个元素时,会初始化数组的大小为10(默认的,可指定),如果超过此容量,再次扩容时就是之前的1.5倍。 

LinkedList

LinkedList是List接口的另一个实现类,LinkedList集合是一个双向链表,其内部包含有两个Node类型的first和last属性维护的双向循环链表,链表中的每一个元素都使用引用的方式来记住他的前一个和后一个元素,当插入或者删除一个节点时,只需要修改几个元素之间的引用关系就行了,无需造成数据的大量移动。所以Linked List在增删元素上具有很高的效率。
LinkedList没有初始化容量,其底层是双向链表结构,所以不存在扩容这一说。
优点:
随机增删元素效率较高,因为增删元素不涉及大量元素的位移。
缺点:
查询效率较低,每一次查找某个元素时都需要从头节点开始往下遍历

HashMap和Hashtable的区别

HashMap

HashMap 是 map 接口的实现类,它的键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap 允许key和value为空值。

HashMap中的方法没有synchronized修饰,所以HashMap是线程不安全的。

HashMap的底层实现:数组+链表

由于HashMap是线程非安全的,所以HashMap在效率上要优于HashTable

HashTable

HashTable中的方法都被Synchronized修饰,所以在多个线程访问HashTable时,不需要自己为它的方法实现同步。HashTable是线程安全的。

HashTable无论是key还是value,都不能为null值。

遍历方面:
HashMap只支持Iterator(迭代器)遍历。
而Hashtable支持Iterator(迭代器)和Enumeration(枚举器)两种方式遍历。

容量方面:
HashMap默认的容量大小是16;增加容量时,每次将容量变为“原始容量x2”。所以其容量一定是2的n次幂。
Hashtable默认的容量大小是11;增加容量时,每次将容量变为“原始容量x2 + 1”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值