网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
id2OrderMap.put(order.id, order);
}
private class Order {
// 订单类
public long id;
public long userId;
public long createTime;
// …more fields…
}
不过,你可能会有疑问,既然在真实的软件开发中,数据结构和算法要处理的都是对象,那为啥书本中都可以按照拿整数(或字符串)类型,而不是对象来讲解呢?
我们知道,数据结构和算法要解决的都是”更快“、”更省“的问题。更快指代码的执行速度,更省指存储空间的消耗。
”更快“这里你先简单理解为”查找更快“,当然还有增删改以及一些统计操作,不过,都差不多,你理解了”查找“,其他的操作也就都理解了。我们在一组数据中,查找一个想要的数据的时候,都是通过某个键值(key)来查找的。
这里的键值怎么理解呢?我们拿刚刚的订单的例子来说明一下。我们希望在这组订单中,按照订单ID来快速的查找订单。那我们就把订单的ID看做键值(key),并且按照key来组织成红黑树这种数据结构。红黑树中存储的是key值和订单对象的内存地址,而订单对象本身是存储在另外的内存空间中的(像Java这种语言,就是存储在堆内存中的)。
为了方便你理解,我画了一张图,你可以对比着文字描述看下。
那你可能说,那我要是再想通过订单的用户ID来查找订单呢?这个时候该怎么办呢?
你就可以再以用户ID作为键值,创建另外一个红黑树。实际上,这就是我们之前文章中提到的多重索引结构。如果翻译成Java代码的话,就是下面这一个样子。
// 两个索引
private TreeMap<long, Order> id2OrderMap = new TreeMap<>();
private TreeMap<long, Order> userId2OrderMap = new TreeMap<>();
public void add(Order order) {
// order在外部创建,内存中只有一份
id2OrderMap.put(order.id, order);
userId2OrderMap.put(order.userId, order);
}
private class Order {
public long id;
public long userId;
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**