做网站防护的网站,wordpress 懒人图库,wordpress次级目录ftp,掌握商务网站建设策略目录
1.搜索树
1.1概念
1.2查找
1.3插入
1.4删除
2.Map
2.1map说明
2.2TreeMap和HashMap
2.3常用方法
3.Set
3.1set说明
3.2TreeSet和HashSet
3.3常用方法 1.搜索树
1.1概念 二叉搜索树又称二叉排序树#xff0c;它或者是一棵空树#xff0c;或者具有以下性质它或者是一棵空树或者具有以下性质 1 若它的左子树不为空则左子树上所有节点的值都小于根节点的值 2 若它的右子树不为空则右子树上所有节点的值都大于根节点的值 3 它的左右子树也分别为二叉搜索树 1.2查找
public class BinarySearchTree {static class TreeNode {public int val;public TreeNode left;public TreeNode right;public TreeNode(int val) {this.val val;}}public TreeNode root;//根结点public TreeNode search(int val) {TreeNode cur root;while (cur ! null) {if (cur.val val) {cur cur.right;} else if (cur.val val) {cur cur.left;} else {return cur;}}return null;}
}
1.3插入
从根节点开始比根结点小向左走比根结点大向右走直到达到叶子结点插入该叶子结点。
public boolean insert(int key) {TreeNode node new TreeNode(key);//第一次插入if (root null) {root node;return true;}//之后的插入TreeNode cur root;TreeNode parent null;//用来记录cur的位置while (cur ! null) {if (cur.val key) {parent cur;cur cur.right;} else if (cur.val key) {parent cur;cur cur.left;}else { //相同数据不能插入return false;}}if (parent.val key) {parent.left node;}else {parent.right node;}return true;
}
1.4删除
方法替罪羊删除法
找到左树的最右边即左树最大值或找到右树的最左边即右树的最小值 作为替罪羊。
/*** param cur 要删除的结点* param parent 要删除节点的父节点*/
private void remove(TreeNode cur, TreeNode parent) {if(cur.left null) { //1.cur的左树为空if(cur root) {root cur.right;}else if(cur parent.left) {parent.left cur.right;}else {parent.right cur.right;}}else if(cur.right null) { //2.cur的右树为空if(cur root) {root cur.left;}else if(cur parent.left) {parent.left cur.left;}else {parent.right cur.left;}}else { //3.cur的左右树都不为空//方法替罪羊删除法//找右树的最小值即右树的最左边作为替罪羊TreeNode targetParent cur;TreeNode target cur.right;while (target.left ! null) { //直到左树为空说明已经找到了替罪羊targetParent target;target target.left;}cur.val target.val; //覆盖//回到了上面的情况1和情况2if(target targetParent.left) {targetParent.left target.right;}else {targetParent.right target.right;}}
}
Set中存储keyMap中存储Key-value键值对
2.Map
2.1map说明
Map官方文档Map (Java Platform SE 8 ) 注意 1.Map是一个接口不能直接实例化对象如果要实例化对象只能实例化其实现类TreeMap或HashMap 2.Map中存放键值对的Key是唯一的value是可重复的 3.在TreeMap中插入键值对时key不能为空否则会抛出NullPointerException异常value可以为空。但HashMap的key和value都可以为空 4. Map中的Key可以全部分离出来存储到Set中来进行访问(因为Key不能重复) 5. Map中的value可以全部分离出来存储在Collection的任何一个子集合中(value可能有重复)。 6. Map中键值对的Key不能直接修改value可以修改如果要修改key只能先将该key删除掉然后再来进行重新插入。 2.2TreeMap和HashMap
MapTreeMapHashMap底层结构红黑树哈希桶增删查改复杂度O(logN)O(1)是否有序关于key有序无序是否线程安全不安全不安全增删查改区别需要进行元素比较通过哈希函数计算哈希地址比较与覆写key必须可比较否则会抛出ClassCastException异常自定义类型需要覆写equals和hashCode方法应用场景需要在key有序场景下key是否有序不关心需要更高的时间性能
2.3常用方法
方法说明V get (Object key )返回key对应的valueV getOrDefault (Object key, V defaultValue)返回key对应的value key不存在返回默认值V put (K key, V value)设置key对应的valueV remove (Object key删除key对应的映射关系SetK keySet () 返回所有 key 的不重复集合 CollectionV values ()返回所有 value 的可重复集合SetMap.EntryK, V entrySet ()返回所有的 key-value 映射关系boolean containsKey (Object key)判断是否包含 keyboolean containsValues (Object value)判断是否包含 value
3.Set
3.1set说明
Set官方文档Set (Java Platform SE 8 ) 注意 1. Set是继承自Collection的一个接口类 2. Set中只存储key并且要求key一定要唯一 3. TreeSet的底层是使用Map来实现的其使用key与Object的一个默认对象作为键值对插入到Map中的 4. Set最大的功能就是对集合中的元素进行去重 5. 实现Set接口的常用类有TreeSet和HashSet还有一个LinkedHashSetLinkedHashSet是在HashSet的基础上维护了一个双向链表来记录元素的插入次序 6. Set中的Key不能修改如果要修改先将原来的删除掉然后再重新插入 7. TreeSet中不能插入null的keyHashSet可以。 3.2TreeSet和HashSet
类TreeMap和HashMap
Set底层结构TreeSetHashSet底层结构红黑树哈希桶增删查改时间复杂度O(logN)O(1)是否有序关于key有序不一定有序线程安全不安全不安全增删查改区别按照红黑树的特性进行插入和删除先计算key哈希地址再进行插入和删除比较与覆写key必须可比较否则会抛出ClassCastException异常自定义类型需要覆写equals和hashCode方法应用场景需要在key有序场景下key是否有序不关心需要更高的时间性能
3.3常用方法
方法说明boolean add ( E e )添加元素但重复元素不会被添加成功void clear ()清空集合boolean contains ( Object o )判断 o 是否在集合中IteratorE iterator ()返回迭代器boolean remove ( Object o )删除集合中的 oint size ()返回 set 中元素的个数boolean isEmpty ()检测 set 是否为空Object [] toArray ()将 set 中的元素转换为数组返回boolean containsAll ( Collection? c )判断集合 c 中的元素是否在 set 中全部存在boolean addAll ( Collection? extends E c )将集合c中的元素添加到 set 中达到去重效果