集合(Set)

  • 集合的接口定义
  • 双向链表 LinkedList 实现 ListSet
  • 红黑树 RBTree 实现 TreeSet
  • TreeMap 实现 TreeSet
  • HashMap 实现 HashSet

数据结构与算法笔记目录:《恋上数据结构》 笔记目录

想加深 Java 基础推荐看这个: Java 强化笔记目录

集合的特点:

  • 不存放重复的元素
  • 常用于去重
    存放新增 IP,统计新增 IP
    存放词汇,统计词汇量

思考:集合的内部实现能否直接利用以前学过的数据结构?

  • 动态数组
  • 链表
  • 二叉搜索树(AVL树、红黑树)

集合的接口定义

集合的接口文件(interface),所有实现的集合都需要实现该接口。

public interface Set<E> {int size();   //元素数量boolean isEmpty(); // 是否为空void claer(); // 清空集合boolean contains(E element); // 是否包含element元素void add(E element); // 添加element元素void remove(E element); // 删除element元素void traversal(Visitor<E> visitor); // 通过访问器遍历public static abstract class Visitor<E>{ // 访问器boolean stop;public abstract boolean visit(E element);}
}

双向链表 LinkedList 实现 ListSet

通过 双向链表 实现 ListSet。

/*** LinkedList实现的ListSet*/
public class ListSet<E> implements Set<E>{private LinkedList<E> list = new LinkedList<>();public int size() {return list.size();}public boolean isEmpty() {return list.isEmpty();}public void claer() {list.clear();}public boolean contains(E element) {return list.contains(element);}public void add(E element) {// if(list.contains(element)) return;int index = list.indexOf(element);if(index == List.ELEMENT_NOT_FOUND){ // 没有该元素list.add(element); // 没有就添加}else{list.set(index, element); // 已经有就替换}}public void remove(E element) {int index = list.indexOf(element);if(index != List.ELEMENT_NOT_FOUND){list.remove(index);}}public void traversal(Visitor<E> visitor) {int size = list.size();for(int i = 0; i < size; i++){visitor.visit(list.get(i));}}}

红黑树 RBTree 实现 TreeSet

通过 红黑树 实现的 TreeSet。

/*** 红黑树实现集合*/
public class TreeSet<E> implements Set<E>{private RBTree<E> tree = new RBTree<>();public int size() {return tree.size();}public boolean isEmpty() {return tree.isEmpty();}public void claer() {tree.clear();}public boolean contains(E element) {return tree.contains(element);}public void add(E element) {tree.add(element); // 红黑树自带去重}public void remove(E element) {tree.remove(element);}public void traversal(Visitor<E> visitor) {tree.inorder(new BinaryTree.Visitor<E>() {@Overridepublic boolean visit(E element) {return visitor.visit(element);}});}}

TreeMap 实现 TreeSet

通过 TreeMap 实现 TreeSet。

/*** 利用TreeMap实现TreeSet*/
public class TreeSet<E> implements Set<E> {private Map<E, Object> map = new TreeMap<>();public int size() {return map.size();}public boolean isEmpty() {return map.isEmpty();}public void claer() {map.clear();}public boolean contains(E element) {return map.containsKey(element);}public void add(E element) {map.put(element, null);}public void remove(E element) {map.remove(element);}public void traversal(Visitor<E> visitor) {map.traversal(new Map.Visitor<E, Object>() {public boolean visit(E key, Object value) {return visitor.visit(key);}});}
}

HashMap 实现 HashSet

通过 HashMap 实现 TreeSet。

/*** 利用HashMap实现HashSet*/
public class HashSet<E> implements Set<E> {private HashMap<E, Object> map = new HashMap<>();public int size() {return map.size();}public boolean isEmpty() {return map.isEmpty();}public void clear() {map.clear();}public boolean contains(E element) {return map.containsKey(element);}public void add(E element) {map.put(element, null);}public void remove(E element) {map.remove(element);}public void traversal(Visitor<E> visitor) {map.traversal(new Map.Visitor<E, Object>() {public boolean visit(E key, Object value) {return visitor.visit(key);}});}}

《恋上数据结构第1季》集合 ListSet、TreeSet、HashSet相关推荐

  1. 《恋上数据结构第1季》二叉搜索树BST

    二叉搜索树(BinarySearchTree) BST 接口设计 BST 基础 添加元素: add() 删除元素: remove() 删除节点 – 叶子节点 删除节点 – 度为1的节点 删除节点 – ...

  2. 《恋上数据结构第1季》动态数组实现栈

    栈(Stack) 栈的应用 – 浏览器的前进和后退 栈的接口设计 动态数组实现栈 练习题 逆波兰表达式求值 有效的括号 数据结构与算法笔记目录:<恋上数据结构> 笔记目录 想加深 Java ...

  3. 《恋上数据结构第1季》二叉树基础、真二叉树、满二叉树、完全二叉树、二叉树的遍历(重点)

    二叉树(Binary Tree) 树(Tree)的基本概念 有序树.无序树.森林 二叉树(Binary Tree) 二叉树的性质 真二叉树(Proper Binary Tree) 满二叉树(Full ...

  4. 《恋上数据结构第1季》B树

    B树 m阶B树的性质 B树 vs 二叉搜索树 搜索 添加 – 上溢 添加 – 上溢的解决(假设5阶) 删除 删除 – 叶子节点 删除 – 非叶子节点 删除 – 下溢 删除 – 下溢的解决 4阶B树 数 ...

  5. 《恋上数据结构第1季》二叉树代码实现

    二叉树(BinaryTree) BinaryTree 基础 遍历(先序.中序.后序.层次遍历) 先序遍历: preorder() 中序遍历: inorder() 后序遍历: postorder() 层 ...

  6. 《恋上数据结构第1季》字典树 Trie

    字典树Trie Trie 简介 Trie 实现 接口设计 源码 测试 数据结构与算法笔记目录:<恋上数据结构> 笔记目录 想加深 Java 基础推荐看这个: Java 强化笔记目录 Tri ...

  7. 《恋上数据结构第1季》二叉堆实现优先级队列

    优先级队列(Priority Queue) 优先级队列简介 优先队列的底层实现 二叉堆实现优先级队列源码 测试代码 数据结构与算法笔记目录:<恋上数据结构> 笔记目录 想加深 Java 基 ...

  8. 《恋上数据结构第1季》二叉堆原理及实现、最小堆解决 TOP K 问题

    二叉堆 BinaryHeap 堆(Heap) 堆的出现 堆简介 二叉堆(Binary Heap) 获取最大值 最大堆 - 添加 最大堆 - 添加优化 最大堆 - 删除 replace 最大堆 - 批量 ...

  9. 《恋上数据结构第1季》哈希表介绍以及从源码分析哈希值计算

    哈希表(Hash Table) 引出哈希表 哈希表(Hash Table) 哈希冲突(Hash Collision) JDK1.8的哈希冲突解决方案 哈希函数 如何生成 key 的哈希值 Intege ...

最新文章

  1. Listener--------监听器
  2. string的find函数
  3. [USACO1.5]数字三角形 Number Triangles
  4. GIS的下个十年(Chuck Drinnan, principal, eWAM Associates)
  5. symbian VC环境配置及其helloword详解
  6. Atitit oodbms的查询,面向对象的sql查询jpa jpql hql
  7. DWF文件该如何打开查看呢?
  8. 计算机网络设计——企业网络规划与搭建
  9. 状态机实现的LED交通灯2
  10. html 网站发布到公网
  11. java打印设置_java如何设置系统默认打印机
  12. OPCUA 设置登录用户名与密码
  13. [题目解析]乐乐的数字
  14. 【欣赏】一组伤感唯美的图片
  15. 云集品以共享经济为幌子因涉及传销被关闭,做社交电商防止误入
  16. Zigbee 入网过程详解
  17. SQL回炉重造07_函数
  18. 认识DDR SDRAM
  19. vue后台系统管理项目-角色权限分配管理功能
  20. 歌名:江湖笑 演唱:周华健

热门文章

  1. 我有十万块,想自己创业,是做电商还是做实体店?
  2. 挣多少钱让你觉得生存无忧,有底气做感兴趣的事?
  3. 做老板的,首先要懂销售,销售什么?
  4. 对程序员来说最难的是写代码吗?
  5. Qt4_在表中显示数据
  6. sp_MSforeachtable简介; 遍历数据库中的所有表运行命令
  7. ta-lib 里的蜡烛图形态函数源码
  8. Qt osg QWidget osgViewer::Viewer
  9. texshop 使用技巧
  10. R语言中的数据处理包dplyr、tidyr笔记