**深拷⻉浅拷⻉的区别?如何实现⼀个深拷⻉?**

JavaScript 中存在两⼤数据类型:
基本类型
引⽤类型
基本类型数据保存在在栈内存中
引⽤类型数据保存在堆内存中,引⽤数据类型的变量是⼀个指向堆内存中实际对象的引⽤,存在栈中

浅拷⻉
浅拷⻉,指的是创建新的数据,这个数据有着原始数据属性值的⼀份精确拷⻉
如果属性是基本类型,拷⻉的就是基本类型的值。如果属性是引⽤类型,拷⻉的就是内存地址
即浅拷⻉是拷⻉⼀层,深层次的引⽤类型则共享内存地址
存在浅拷⻉的现象有:
Object.assign
Array.prototype.slice() , Array.prototype.concat()
使⽤拓展运算符实现的复制

**深拷⻉**

深拷⻉开辟⼀个新的栈,两个对象属完成相同,但是对应两个不同的地址,修改⼀个对象的属性,不会
改变另⼀个对象的属性
常⻅的深拷⻉⽅式有:
_.cloneDeep()
jQuery.extend()
JSON.stringify()

抢红包算法是一个比较经典的红包分配问题,可以用 Java 实现。以下是一个简单的抢红包算法的实现: ```java import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Random; public class RedPacket { private BigDecimal totalAmount; private int totalNum; public RedPacket(BigDecimal totalAmount, int totalNum) { this.totalAmount = totalAmount; this.totalNum = totalNum; } public List<BigDecimal> divideRedPacket() { List<BigDecimal> result = new ArrayList<>(); BigDecimal restAmount = totalAmount; int restNum = totalNum; Random random = new Random(); for (int i = 0; i < totalNum - 1; i++) { BigDecimal amount = restAmount.multiply(new BigDecimal(random.nextDouble())).setScale(2, BigDecimal.ROUND_HALF_UP); restAmount = restAmount.subtract(amount); restNum--; result.add(amount); } result.add(restAmount); return result; } } ``` 该算法的实现思路如下: 1. 接收总金额和总人数作为参数。 2. 创建一个空的列表,用于存储每个人应得的金额。 3. 使用一个 `for` 循环,循环次数为总人数减一。 4. 在每次循环中,生成一个随机数,随机数的范围为 0 到 1 之间,然后将总金额乘以该随机数得到此次分配的金额。 5. 将此次分配的金额从总金额中减去,并将总人数减一。 6. 将此次分配的金额添加到列表中。 7. 最后将剩余的金额添加到列表中,并将列表返回。 需要注意的是,该算法只是一个简单的实现,实际分配红包时可能需要考虑更多因素,如最小金额、最大金额、抢红包时间等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值