数据结构随笔

常见的数据结构我们都知道有:队列、栈、数组、链表、树(二叉树、红黑树等)、图,那么怎么记会更好理解呢?还是要从特点出发:

1.队列:没有固定的实现方式,可以用数组实现,也可以用链表实现,特点就是先进先出。数据有序,但是数据之间可以没有任何关联

2.栈:没有固定的实现方式,可以用数组实现,也可以用链表实现,特点就是先进后出,后进先出。数据也是有序的,但是数据之间可以没有任何关联

3.数组:一群没有任何关联的数,按照一定的规则放到一起,数据是有序的。特点就是容量固定,根据下角标查找快,增删慢

4.链表:数据之间是一对一的关联关系,可以是单链表、双向链表、环形链表,特点就是查找慢,增删快

5.树:数据之间是一对多关系,比如二叉树、红黑树、23树等,特点就是查找、删快,但是增加构建树慢

6.图:数据之间是多对多关系,关系复杂,多维数组表示

所以,以上几种数据结构可以发现,3-6种就是一种数据之间关系渐进的,从没有任何关系、一对一、一对多、多对多逐步复杂,逐步增强的。下面我们再来看两种特殊的数据集合:

List:集合

特点就是,数据可以重复,元素的存入顺序和取出顺序一致,可以通过下角标来直接过去数据。

1.ArrayList 用数组结构实现,所以查找快,但是增删慢(涉及到数据整体复制移动和扩容)

2.LinkList 双向链表结构实现,但是链表结构没有下角标啊,咋实现通过角标获取数据的呢?原来是通过遍历到指定位置获取的。所以查找慢,但是增删快

set

特点就是,数据不可以重复,元素的存入顺序和取出顺序不一定一致。

1.HashSet:什么鬼?居然是用HashMap实现的。value为Object的HashMap,我晕。又绕回HashMap的实现原理了,那就是数组+链表(红黑树)。这其实就可以解释为什么不可以重复了,因为HashMap的链表不可以重复,也就可以理解为什么存入顺序和取出顺序不一定一致,因为遍历的时候是从数组的最开始那个链表开始的,逐个遍历所有数组中的链表,当然就无序了。

2.LinkHashSet:什么鬼?居然使用LinkHashMap实现的,LinkHashMap我们知道他是在HashMap的基础上,又单独增加了一个双向链表结构,也就是每个节点不仅仅有HashMap中的next节点,还要维护一个双向链表的before和after节点,所以我们既可以向操作HashMap一样来处理数据,也可以使得存入数据顺序和取出数据顺序一致(双向链表来实现的),但是维护起来可就麻烦多了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值