java 虚拟函数_为什么Java中的函数默认是虚拟函数

为什么Java中的函数默认是虚拟函数

关注:221  答案:2  mip版

解决时间 2021-01-19 04:21

e6cb1a03ad541b3098697807b7bf1798.png

提问者 侑點尐悲伤

2021-01-18 23:42

为什么Java中的函数默认是虚拟函数

最佳答案

e6cb1a03ad541b3098697807b7bf1798.png

二级知识专家我心里的你没人能代替

2021-01-19 01:11

虚函数的存在是为了多态。

以C++与Java比对说明:

C++中普通成员函数加上virtual关键字就成为虚函数。

Java中其实没有虚函数的概念,它的普通函数就相当于C++的虚函数,动态绑定是Java的默认行为。如果Java中不希望某个函数具有虚函数特性,可以加上final关键字变成非虚函数。

总结:java在最大限度地保留了面向对象三要素(封装、继承、多态)的基础上,尽最大努力讲语法进行简化。C++为实现多态需要额外的关键字,而Java则直接提供了这种机制,是的封装、继承和多态变得更加容易使用。

全部回答

e6cb1a03ad541b3098697807b7bf1798.png

1楼用命换你心

2021-01-19 02:05

hash是object的一个方法 object.hashcode() ; 返回值是int类型

1、hash值有什么用?

hashmap、hashtable、hashset,所以涉及到使用hash值进行优化存储的地方,都会用到hashcode。hashcode是key,这种计算为提高计算的性能。想想看,一般来说,数组算是比较快的集合类了吧,直接用index定位元素,简直就是o(1)的级别。但是添加元素就不这么乐观了。但是使用hash类的集合,添加元素,移动的元素少,只影响一小块,并且查找元素,由于hash值已经进行了定位分组,所以也会大大缩小涉及面,快速定位。

2、hash值应该符合什么原则?

a、等幂性。不管执行多少次获取hash值的操作,只要对象不变,那么hash值是固定的。如果第一次取跟第n次取不一样,那就用起来很麻烦,需要记录当前是第几次操作,这种需要记录状态的事情,可不是什么好事。

b、对等性。若两个对象equal方法返回为true,则其hash值也应该是一样的。举例说明:若你将obja作为key存入hashmap中,然后new了一个objb。在你看来objb和obja是一个东西(因为他们equal),但是使用objb到hashmap中却取不出来东西。

c、互异性。若两个对象equal方法返回为false,则其hash值最好也是不同的,但这个不是必须的,只是这样做会提高hash类操作的性能(碰撞几率低)。

3、hash值应该怎么计算?

a、简单计算就是组成成员的hash值直接相加即可。比如objecta有三个属性,propa、propb和propc,最直接的计算方式就是propa.hashcode+propb.hashcode+propc.hashcode。

b、但是如果遇到有顺序相关的怎么办?比如string类型是由char数组组成,并且这些数组是有顺序的。如果使用第一种计算方法,则“abcd”和“bcda”就会产生同样的hashcode,那么怎么办呢?最直接想到的办法就是加权,不同的index加不同的权值,这个权值的确定最直接的方法就是某个常数值的几次幂。比如为string的计算hash值为k^0*a.hashcode+k^1*b.hashcode+k^2*c.hashcode+k^3*d.hashcode。k的选择也有说法,最好不要是偶数,因为偶数的相乘会造成信息的丢失(乘以2就是左移1位,一旦溢出就会造成信息的丢失,这种计算会造成溢出后的值与某个看似不相关的数值得到的结果是一样的),所以最好是奇数,在这一点上比较推荐使用7,因为7=8-1=2^3-1,这样计算的时候,直接左移几位再进行一次普通的加减法即可(java中常用的是31(32-1=2^5-1))。

我要举报

如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

点此我要举报以上信息!

推荐资讯

大家都在看

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值