Java设计砍价功能_Java需要注意的地方

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

对ArrayList的操作一般分为两个步骤,改变位置(size)和操作元素(e)。

Java中transient关键字的作用,简单地说,就是让某些被修饰的成员属性变量不被序列化。

在序列化的时候会调用方法,将和写入;反序列化时调用,从获取和,再恢复到。?

原因在于是一个缓存数组,它通常会预留一些容量,等容量不足时再扩充容量,那么有些空间可能就没有实际存储元素,采用上诉的方式来实现序列化时,就可以保证只序列化实际存储的那些元素,而不是整个数组,从而节省空间和时间。

优点:

因为其底层是数组,所以修改和查询效率高。

可自动扩容(1.5倍)。

缺点:

插入和删除效率不高。

线程不安全。

插入效率比平衡二叉树高,查询效率比普通二叉树高。所以选择性能相对折中的红黑树。

备注:为什么是8,6?个人认为7是临界点 3层深度,在临界点加减1.

备注:tab[index=(n - 1) & hash]----解释了为什么需要2的次幂作为数组的容量。由于n是2的次幂,因此,n-1类似于一个低位掩码。通过与操作,高位的hash值全部归零,保证低位才有效 从而保证获得的值都小于n。(还有就是扩容不是原索引就是原索引+原容量)

但是,使用了该功能之后,由于只取了低位,因此 hash 碰撞会也会相应的变得很严重。这时候就需要使用「扰动函数」^ (h >>> 16)该函数通过将哈希码的高16位的右移后与原哈希码进行异或而得到。此方法保证了高16位不变, 低16位根据异或后的结果改变。

?

虽然设计的非常优秀, 但是应该尽可能少的避免?, 该过程会很耗费时间。

同时, 由于不能自动的缩小容量 因此,如果你的容量很大,但执行了很多?操作时,容量并不会减少。如果你觉得需要减少容量,请重新创建一个 hashmap。

?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值