当前位置: 首页 > wzjs >正文

如何学好网站建设暴风seo论坛

如何学好网站建设,暴风seo论坛,网站网页制作模板,网站域名设计推荐目录 引言1. 搜索树1.1 二叉搜索树的概念1.2 二叉搜索树的操作1.2.1 查找1.2.2 插入1.2.3 删除 2. Map2.1 Map的概念2.2 Map接口内部的Entry接口(Map.Entry<K, V>)2.3 Map的常用方法 3. Set3.1 Set 概念3.2 Set常见方法 4. 总结 引言 本篇文章介绍Map和Set类和其实现类T…

目录

  • 引言
  • 1. 搜索树
    • 1.1 二叉搜索树的概念
    • 1.2 二叉搜索树的操作
    • 1.2.1 查找
      • 1.2.2 插入
      • 1.2.3 删除
  • 2. Map
    • 2.1 Map的概念
    • 2.2 Map接口内部的Entry接口(Map.Entry<K, V>)
    • 2.3 Map的常用方法
  • 3. Set
    • 3.1 Set 概念
    • 3.2 Set常见方法
  • 4. 总结

引言

本篇文章介绍Map和Set类和其实现类TreeMap和TreeSet类的使用。

1. 搜索树

在讲述TreeMap和TreeSet之前,先介绍一下搜索树,java中利用搜索树来实现Map和Set。在这里介绍一下二叉搜索树。

1.1 二叉搜索树的概念

二叉搜索树(Binary Search Tree, BST)是一种特殊的二叉树,也叫二叉排序树。具有如下性质:

  1. 左子树上所有节点的值都小于其根节点的值。
  2. 右子树上所有节点的值都大于其根节点的值。
  3. 左子树和右子树也都是二叉搜索树。

1.2 二叉搜索树的操作

二叉搜索树的定义和二叉树一致

    static class TreeNode {public int val;public TreeNode left;//左孩子的引用public TreeNode right;//右孩子的引用public TreeNode(int val) {this.val = val;}}

1.2.1 查找

从根节点开始,比较当前节点的值与目标值。如果目标值小于当前节点的值,则移动到左子树;如果目标值大于当前节点的值,则移动到右子树;如果相等,则返回当前节点。循环继续,直到找到目标值或到达树的末端。

    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.2.2 插入

  1. 从根节点开始。
  2. 如果树为空,则新节点作为根节点。
  3. 否则,比较新节点的值与当前节点的值:
    如果新节点的值小于当前节点的值,则移动到左子树。
    如果新节点的值大于当前节点的值,则移动到右子树。
  4. 重复步骤3,直到找到合适的插入位置。
public void insert(int val) {if (root == null) {root = new TreeNode(val);return;}TreeNode cur = root;TreeNode parent = null;while (cur != null) {if (cur.val < val) {parent = cur;cur = cur.right;} else if (cur.val > val) {parent = cur;cur = cur.left;} else {return;}}if (parent.val < val) {parent.right = new TreeNode(val);} else {parent.left = new TreeNode(val);}}

1.2.3 删除

二叉搜索树的删除操作较为复杂。

  1. 查找要删除的节点:从根节点开始,找到要删除的节点及其父节点。
  2. 删除节点:
    1. 要删除的节点没有左子节点:
      如果要删除的节点是根节点,直接将根节点设为其右子节点。
      否则,更新父节点的指针,将其指向要删除节点的右子节点。
    2. 要删除的节点没有右子节点:
      如果要删除的节点是根节点,直接将根节点设为其左子节点。
      否则,更新父节点的指针,将其指向要删除节点的左子节点。
    3. 要删除的节点有两个子节点:
      找到要删除节点的后继节点(右子树中最小的节点)。
      用后继节点的值替代要删除节点的值。
      删除后继节点,更新其父节点的指针。
public void remove(int val) {TreeNode cur = root;TreeNode parent = null;while (cur != null) {if (cur.val < val) {parent = cur;cur = cur.right;} else if (cur.val > val) {parent = cur;cur = cur.left;}else {removeNode(parent,cur);return;}}}private void removeNode(TreeNode parent, TreeNode cur) {if (cur.left == null){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){if(cur == root){root = cur.left;}else if(cur == parent.left){parent.left = cur.left;}else{parent.right = cur.left;}}else{TreeNode target = cur.right;TreeNode targetParent = cur;while(target.left != null){targetParent = target;target = target.left;}if (target == targetParent.left){targetParent.left = target.right;}else{targetParent.right = target.right;}}}

2. Map

2.1 Map的概念

Map是一个接口类,是一种键值对的集合,用于存储键值对的映射关系。该类存储的是<K,V>结构的键值对。
Map接口定义了一系列方法,用于操作键值对,包括插入、删除、获取和遍历等操作。在Map中,每个键对应一个值,键(K)是唯一的,值(V)可以重复。

2.2 Map接口内部的Entry接口(Map.Entry<K, V>)

Map.Entry接口表示Map中的一个键值对(entry),它是Map接口的内部接口。Map.Entry接口定义了操作键值对的方法,允许访问键和值,以及对它们进行操作。
Map.Entry接口包含以下常用方法:

  1. getKey(): 返回该键值对中的键。
  2. getValue(): 返回该键值对中的值。
  3. setValue(V value): 设置该键值对中的值为指定的值。

2.3 Map的常用方法

  1. V get(Object key):
    根据指定的键获取对应的值。如果键不存在,则返回 null。
  2. V getOrDefault(Object key, V defaultValue):
    根据指定的键获取对应的值。如果键不存在,则返回默认值 defaultValue。
  3. V put(K key, V value):
    将指定的键值对插入到 Map 中。如果键已经存在,则更新对应的值,并返回旧值。
  4. V remove(Object key):
    根据指定的键删除对应的键值对,并返回被删除的值。如果键不存在,则返回 null。
  5. Set keySet():
    返回 Map 中所有键的集合。
  6. Collection values():
    返回 Map 中所有值的集合。
  7. Set<Map.Entry<K, V>> entrySet():
    返回 Map 中所有键值对的集合。
  8. boolean containsKey(Object key):
    判断 Map 中是否包含指定的键。
  9. boolean containsValue(Object value):
    判断 Map 中是否包含指定的值。

TreeMap示例代码:

public class MapExample {public static void main(String[] args) {Map<String, Integer> map = new TreeMap<>();// putmap.put("one", 1);map.put("two", 2);// getSystem.out.println("Value for key 'one': " + map.get("one")); // 1// getOrDefaultSystem.out.println("Value for key 'three' (default 0): " + map.getOrDefault("three", 0)); // 0// removeSystem.out.println("Removed value for key 'one': " + map.remove("one"));// 1// keySetSet<String> keys = map.keySet();System.out.println("Keys: " + keys); // [two]// valuesCollection<Integer> values = map.values();System.out.println("Values: " + values); // [2]// entrySetSet<Map.Entry<String, Integer>> entries = map.entrySet();System.out.println("Entries: " + entries); // [two=2]// containsKeySystem.out.println("Contains key 'two': " + map.containsKey("two")); // true// containsValueSystem.out.println("Contains value 2: " + map.containsValue(2)); // true}
}

3. Set

3.1 Set 概念

Set 是 Java 集合框架中的一个接口,它表示一个不包含重复元素的集合。Set 接口继承自 Collection 接口,相较于Map不同的是它只存储了Key。

3.2 Set常见方法

  1. boolean add(E e):
    将指定的元素添加到集合中(如果该元素尚不存在于集合中)。如果集合中已存在该元素,则返回 false。
  2. void clear():
    移除集合中的所有元素。
  3. boolean contains(Object o):
    如果集合中包含指定的元素,则返回 true。
  4. Iterator iterator():
    返回集合中元素的迭代器。
  5. boolean remove(Object o):
    如果集合中存在指定的元素,则将其移除,并返回 true。
  6. int size():
    返回集合中的元素数量。
  7. boolean isEmpty():
    如果集合为空,则返回 true。
  8. Object[] toArray():
    返回包含集合中所有元素的数组。
  9. boolean containsAll(Collection<?> c):
    如果集合包含指定集合中的所有元素,则返回 true。
  10. boolean addAll(Collection<? extends E> c):
    将指定集合中的所有元素添加到集合中(如果这些元素尚不存在于集合中)。如果集合因调用此方法而发生更改,则返回 true。

TreeSet示例代码:

public class SetExample {public static void main(String[] args) {Set<String> set = new TreeSet<>();// addset.add("one");set.add("two");// containsSystem.out.println("Contains 'one': " + set.contains("one")); // true// iteratorIterator<String> iterator = set.iterator();System.out.print("Set elements: ");while (iterator.hasNext()) {System.out.print(iterator.next() + " "); // one two}System.out.println();// removeset.remove("one");System.out.println("After removing 'one', contains 'one': " + set.contains("one")); // false// sizeSystem.out.println("Set size: " + set.size()); // 1// isEmptySystem.out.println("Is set empty: " + set.isEmpty()); // false// toArrayObject[] array = set.toArray();System.out.print("Array elements: ");for (Object obj : array) {System.out.print(obj + " "); // two}System.out.println();// containsAllSet<String> otherSet = new HashSet<>();otherSet.add("two");System.out.println("Contains all elements of otherSet: " + set.containsAll(otherSet)); // true// addAllotherSet.add("three");set.addAll(otherSet);System.out.print("After addAll, set elements: ");for (String element : set) {System.out.print(element + " "); // two three}System.out.println();// clearset.clear();System.out.println("After clear, is set empty: " + set.isEmpty()); // true}
}

4. 总结

以上是对搜索树,Map,Set 的简单介绍,在后面会经常用到Map和Set接口,将会更深入的进行介绍。

http://www.dtcms.com/wzjs/420980.html

相关文章:

  • 来宾北京网站建设查权重的软件
  • scratch在线编程网站seo知识分享
  • 如何查看一个网站是什么程序做的公司网站如何在百度上能搜索到
  • 音乐网站如何建设360社区app
  • 做网站怎么插音频网络服务器地址怎么查
  • 深圳网站搜索引擎优化淘宝直通车推广怎么做
  • 湖南seo服务深圳网站seo优化
  • 100个免费推广网站下载如何注册网站免费注册
  • 龙华做手机网站色盲测试图片
  • 淘宝网站建设百度百科网站运营优化培训
  • 北京服务器托管seo外包公司兴田德润官方地址
  • 建行网站用户名是什么百度云搜索引擎入口盘多多
  • 惠州专业做网站公司廊坊seo推广公司
  • 怎样保存网站资料做证据上海网站建设联系方式
  • 做网站标准步骤网络营销广告策划
  • 简要叙述如何规划建设一个企业网站长沙seo搜索
  • 网站建设维护协议电商平台建设方案
  • 西安做公司网站湖北网站seo策划
  • 企业网站下周网推平台有哪些
  • 唐山网站建设服务网络推广理实一体化软件
  • 高端营销型网站制作新闻 最新消息
  • 商城网上购物北京百度快速优化排名
  • 免费制作网站net域名seo网站快排
  • 网站首页设计怎么写做营销策划的公司
  • 合肥企业做网站橘子seo查询
  • 政府网站建设合同.doc市场监督管理局官网入口
  • wordpress站群主机近日网站收录查询
  • 深圳网站设计 创同盟国内好的seo
  • 布吉商城网站建设基本流程网络流量统计工具
  • 静态网站后台百度大数据中心