| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 六大区别 (重载与重写、顺序表和链表、Comparable和Comparator、抽象类和接口、super和this、ArrayList和LinkedList) -> 正文阅读 |
|
[数据结构与算法]六大区别 (重载与重写、顺序表和链表、Comparable和Comparator、抽象类和接口、super和this、ArrayList和LinkedList) |
区别文章目录一、重载与重写重载(overload):在一个类里面我们需要用一个函数同时兼容多种参数的情况, 我们就可以使用到方法重载 。在同一个方法内,方法名称相同,但是传入参数不同,这个就可以根据传入的参数来判断调用的到底是哪一个方法。重载大大增强了方法的功能性。[继承的时候,不一定就在同一个类里面了] 1.1方法的重载
1.2重载的规则
1.3方法的重写 (覆盖,覆写)同重载不同,重写(Override)是发生在两个类中的,且两个类是继承关系或者实现关系,同时方法签名完全相同!也就是说,方法名称和传入蚕食要完全一致。重写是java实现运行时多态的方式,这种通过对象类型而非定义类型去匹配实现方法的方式极大地提升了程序的开发效率和扩展性,同事也让程序更加易于维护。 重写使用==@Override== 注解注释,使用该注释编辑器会在编译时就检查该方法是否符合重写的条件,避免以为是重写却因出现导致该方法只是重载的尴尬情况发生。 想了解更详细重写 请转到 这个链接!!!!! 1.4 重写的规则:
1.5 小结
二、顺序表和链表顺序表:底层是数组,数组的优点就是顺序表的优点,所以顺序表比较适合查找和修改,只要给定下标就可以找到这个数据并且可以修改; 链表:每个数据是由节点组织,链表适合插入和删除,他只需要通过节点修改执行就好。 关于链表的习题讲解可以点 这个链接 !!! 三、Comparable和Comparator3.1 comparable源码:
ComparaTo比较当前对象与指定对象的顺序
this是当前对象; o:是指定的对象比较 ComparaTo的源码:
也可以理解为当前对象大于,等于,小于返回1,0,-1:
3.2Comparator源码:
compare用法:
Comparator也称之为比较器,可以通过compare指定里面的比较规则; 所以就引出了他两的区别: 3.3小结1、Comparable也称内比较器,对类的侵入性强,Comparable里面的类都是自己跟自己比较,在自定义中的数组排序,如要排序就可以用到Comparable,但是要在这个数组进行另一种设定排序的时候就会改变原有类里面的代码,不够灵活.
Comparator称外在比较器,对类的侵入性弱,不需要修改类本身,只需要修改比较器的比较规则,如要进行其他比较规则直接重写比较器即可;这也算是对Comparable不足的增强,扬长补短; 2.Comparable重写的是compareTo; ? Comparator重写的是compare; 四、抽象类和接口4.1 抽象类1、用abstract修饰 2、抽象类可以包含字段,成员方法,和普通方法规则一样 3、不能被final和private修饰; 4、不能被实例化; 5、extends维护 6、普通类继承抽象类,那么普通类里面所有的抽象方法都要被重写; 4.2 接口1、用interface修饰; 2、接口里面不能有普通方法,只能有抽象方法; 3、接口当中的成员变量,可以用publlic static final修饰; 4、不能被实例化; 5、一个类用implements实现n个接口; 6、接口和接口之间的关系时extends来维护; 详细的语法规则可以看 这个链接 !!!! 五、super和thissuper关键字一般用于继承中,在构造函数和需要用到父类属性和方注的时候使用 大多数书上this写的是代表当前对象,其实是错误的,应该是代表当前对象的引用,想看原因可以 点击这个链接 !!! 六、ArrayList和LinkedListArrayList 和 LinkedList 是 List 接口的两种不同实现。 ArrayList底层是数组,LinkedList底层是一个双向链表,区别主要是他们不同方法使用和不同的时间复杂度。 6.1ArrayList:1、get (int index) 方法时间复杂度是O(1),找到下标即可 2、boolean add(E e)方法,默认是放到这个数组最后的位置,还要考虑扩不扩容,不扩容时间复杂度就是O(1),默认数组大小变为10,需要扩容的话,需要扩容的话,扩容方式就是1.5倍扩容,add的源码最后还有个Arrays.copyOf(),最后还要把原数组复制到新数组中,就会耗时了;
6.2LinkedList:1、get (int index) 方法时间复杂度是O(n),因为要遍历整个链表。 2、boolean add(E e)方法时间复杂度是O(1),因为是链表直接放最后就好了
6.3 小结需要注意的是ArrayList和LinkedList在内存的使用上是不同的,LinkedList是双向链表,所以会存储前序和后续元素地址,所以LinkedList开销会比较大,但是ArrayList就没有这样的开销。另外ArrayList占用的内存用add方法的时候就已经默认是10了,而LinkedList不需要指定大小。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 7:50:34- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |