Map和Set

在了解这两个之前需要知道二叉搜索树
二叉搜索树是节点的左边所有值小于它,右边大于它,并且所有节点满足这一点

点击查看代码
public class BinarySearchTree {
    class TreeNode{
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int val){
            this.val = val;
        }
    }
    public TreeNode root;
    //添加元素
    public boolean insert(int val){
        if(root == null){
            root = new TreeNode(val);
            return true;
        }
        TreeNode node = new TreeNode(val);
        TreeNode cur = root;
        TreeNode parent = root;
        while (cur != null){
            if(cur.val > val){
                parent = cur;
                cur = cur.left;
            }else if(cur.val < val){
                parent = cur;
                cur = cur.right;
            }else{
                return false;
            }
        }
        if(parent.val > val){
            parent.left = node;
        }else {
            parent.right = node;
        }
        return true;
    }
    public boolean search(int val){
        TreeNode node = root;
        while (node != null){
            if(node.val < val){
                node = node.right;
            }else if(node.val > val){
                node = node.left;
            }else{
                return true;
            }
        }
        return false;
    }
    //删除
    public void remove(int val){
        TreeNode parent = root;
        TreeNode node = root;
        while (node != null){
            if(node.val < val){
                parent = node;
                node = node.right;
            }else if(node.val > val){
                parent = node;
                node = node.left;
            }else{
                removeNode(node,parent);
                return;
            }
        }
    }
    private void removeNode(TreeNode node,TreeNode parent){
        if(node.left == null){
            if(node == root ){
                root = node.right;
            }else if(node == parent.left){
                parent.left = node.right;
            }else {
                parent.right = node.right;
            }
        }else if(node.right == null){
            if(node == root){
                root = node.left;
            }else if(node == parent.left){
                parent.left = node.left;
            }else {
                parent.right = node.left;
            }
        }else {
            TreeNode curP = node;
            TreeNode cur = node.right;
            while (cur.left != null){
                curP = cur;
                cur = cur.left;
            }
            node.val = cur.val;
            if(curP.left == cur){
                curP.left = cur.right;
            }else {
                curP.right = cur.right;
            }
        }
    }


}
由于性质原因,搜索时可能是完全二叉树,此时时间复杂度为logN,有可能是单分支,时间复杂度为n Map和Set是由红黑树实现的,而红黑树本质是二叉搜索树,只是有了颜色的区分 Map是key - value模型,每一个key对应一个value,key唯一,value不唯一 Set则是只储存了key,value是默认值,它的底层是Map Map.Entry是Map内部实现的方法,用于存放key - value键值映射关系,没有提供设置key的方法 Set因为性质原因可以去重,它的key不能修改只能删去
posted @ 2026-05-14 11:14  alexacaily36  阅读(7)  评论(0)    收藏  举报