《恋上数据结构第1季》集合 ListSet、TreeSet、HashSet
集合(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季》二叉搜索树BST
二叉搜索树(BinarySearchTree) BST 接口设计 BST 基础 添加元素: add() 删除元素: remove() 删除节点 – 叶子节点 删除节点 – 度为1的节点 删除节点 – ...
- 《恋上数据结构第1季》动态数组实现栈
栈(Stack) 栈的应用 – 浏览器的前进和后退 栈的接口设计 动态数组实现栈 练习题 逆波兰表达式求值 有效的括号 数据结构与算法笔记目录:<恋上数据结构> 笔记目录 想加深 Java ...
- 《恋上数据结构第1季》二叉树基础、真二叉树、满二叉树、完全二叉树、二叉树的遍历(重点)
二叉树(Binary Tree) 树(Tree)的基本概念 有序树.无序树.森林 二叉树(Binary Tree) 二叉树的性质 真二叉树(Proper Binary Tree) 满二叉树(Full ...
- 《恋上数据结构第1季》B树
B树 m阶B树的性质 B树 vs 二叉搜索树 搜索 添加 – 上溢 添加 – 上溢的解决(假设5阶) 删除 删除 – 叶子节点 删除 – 非叶子节点 删除 – 下溢 删除 – 下溢的解决 4阶B树 数 ...
- 《恋上数据结构第1季》二叉树代码实现
二叉树(BinaryTree) BinaryTree 基础 遍历(先序.中序.后序.层次遍历) 先序遍历: preorder() 中序遍历: inorder() 后序遍历: postorder() 层 ...
- 《恋上数据结构第1季》字典树 Trie
字典树Trie Trie 简介 Trie 实现 接口设计 源码 测试 数据结构与算法笔记目录:<恋上数据结构> 笔记目录 想加深 Java 基础推荐看这个: Java 强化笔记目录 Tri ...
- 《恋上数据结构第1季》二叉堆实现优先级队列
优先级队列(Priority Queue) 优先级队列简介 优先队列的底层实现 二叉堆实现优先级队列源码 测试代码 数据结构与算法笔记目录:<恋上数据结构> 笔记目录 想加深 Java 基 ...
- 《恋上数据结构第1季》二叉堆原理及实现、最小堆解决 TOP K 问题
二叉堆 BinaryHeap 堆(Heap) 堆的出现 堆简介 二叉堆(Binary Heap) 获取最大值 最大堆 - 添加 最大堆 - 添加优化 最大堆 - 删除 replace 最大堆 - 批量 ...
- 《恋上数据结构第1季》哈希表介绍以及从源码分析哈希值计算
哈希表(Hash Table) 引出哈希表 哈希表(Hash Table) 哈希冲突(Hash Collision) JDK1.8的哈希冲突解决方案 哈希函数 如何生成 key 的哈希值 Intege ...
最新文章
- Listener--------监听器
- string的find函数
- [USACO1.5]数字三角形 Number Triangles
- GIS的下个十年(Chuck Drinnan, principal, eWAM Associates)
- symbian VC环境配置及其helloword详解
- Atitit oodbms的查询,面向对象的sql查询jpa jpql hql
- DWF文件该如何打开查看呢?
- 计算机网络设计——企业网络规划与搭建
- 状态机实现的LED交通灯2
- html 网站发布到公网
- java打印设置_java如何设置系统默认打印机
- OPCUA 设置登录用户名与密码
- [题目解析]乐乐的数字
- 【欣赏】一组伤感唯美的图片
- 云集品以共享经济为幌子因涉及传销被关闭,做社交电商防止误入
- Zigbee 入网过程详解
- SQL回炉重造07_函数
- 认识DDR SDRAM
- vue后台系统管理项目-角色权限分配管理功能
- 歌名:江湖笑 演唱:周华健