数据结构与算法-基础(十六)集合

摘要

集合最重要的特点就是它里面的元素是不会存在重复的,所以集合的内部实现中,添加元素函数是需要先判断是否已经存在这个元素,是代码实现的核心部分。

集合是一个存储数据的序列,序列中的元素不会存在重复,这个就是集合最重要的特点。

就是因为这个特点,它可以被用作序列中元素的去重处理,比如存放新增加的 IP,统计新增的 IP 数量,存放词汇或者统计词汇量等。

集合的内部实现可以直接利用之前学过的数据结构来实现,比如动态数组链表AVL 树或者红黑树(属于二叉搜索树)

这里先用动态数组来实现集合。首先创建一个动态数组的对象来存放元素。

private List<E> list = new LinkedList<>();

集合中的其他函数,比如集合中的元素数量集合是否为空清除集合中的所有元素集合中是否包含某个元素这4个函数可以直接调用 list 的函数来处理,比如实现集合中的元素数量:

// 集合中的元素数量
public int size() {
  return list.size();
}

移除集合中的元素函数需要先在 list 中找到元素的 index,然后再移除 list 中的 index 位置元素。

// ELEMENT_NOT_FOUND:集合空元素标识符,常量为 -1
public void remove(E element) {
  int index = list.indexOf(element);
  if (index != List.ELEMENT_NOT_FOUND) {
    list.remove(index);
  }
}

最后就是实现集合的主要函数,即添加元素函数。因为集合要满足元素不可以重复的要求,所以在添加元素的时候需要先判断集合中是否已经存在该元素:

public void add(E element) {
  int index = list.indexOf(element);
  if (index != List.ELEMENT_NOT_FOUND) {
    // 存在,则替换
    list.set(index, element);
  } else {
    // 不存在,则直接添加
    list.add(element);
  }
}

如果用AVL树或者红黑树,那么添加元素的逻辑就更简单。因为这两种树中的元素都是不会有重复的,所以使用这两种树来实现,就直接调用树的添加函数就可以实现。

public void add(E element) {
  tree.add(element);
}

集合中的其他函数,就可以直接使用树已经有的函数来直接调用,和套用动态数组的方式是一样的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我为双鱼狂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值