zoukankan      html  css  js  c++  java
  • 集合框架 (2叉树,节点)

    数组的特点:
      01.长度一旦被定义,不允许被改变
      02.在内存中开辟连续的空间
      03.便于查询,但是插入和删除麻烦
     
      
      例子:   存在的问题
      如果我们创建了一个数组来保存30名学生的信息
      01.一个班的学生如果不够30, 资源浪费
      02.一个班的学生有40人,内存不够
     
     
      集合框架      父接口 Collection
      public interface List<E> extends Collection<E>
      public interface Set<E> extends Collection<E>
      public interface Map<K,V>
     
      Vector 线程安全,但是性能低
      List  存储的都是不唯一(可以重复),有序(插入顺序)的数据!
      Set   存储的都是唯一(不可以重复),无序的数据!
      Map
     
       List接口常用的实现类 
        ArrayList  底层就是一个动态数组,自动扩容!
                       新增和删除的效率低!遍历数据快!
                  
        LinkedList  底层就是一个链表
                                新增和删除的效率高!查询效率低!
     
      Set接口常用的实现类
       HashSet    散列表
           1.add新增数据
           2.其实是使用了map.put(key,value)
           3.map.put(key,value)决定了 key是唯一的
          
           两个数据如果内容一致,hash值肯定一样!
           如果两个数据的hash值一致,内容有可能不相等!  
          
       (p.hash == hash &&((k = p.key) == key || (key != null && key.equals(k))))
            比较步骤
         01.比较hash
         02.比较内存地址
         03.equals比较内容
        
      
      
       TreeSet  自带排序    树型结构

    *************************************************************************************************************************************************************************************************

    /**
     * 2叉排序树
     */
    public class MyTree {
     private int data; // 根或者是数据
     private MyTree left; // 左子树
     private MyTree right; // 右子树

     public MyTree(int i) {
      data = i;
     }

     private void add(MyTree tree) {
      if (tree.data < this.data) {
       if (left == null) {
        left = tree; // 数据小放 左子树
       } else {
        left.add(tree);
       }
      } else {// 数据小放 右子树
       if (right == null) {
        right = tree;
       } else {
        right.add(tree);
       }
      }
     }

     // 遍历树的所有节点
     private void show() {
      if (left != null) {
       left.show();
      }
      System.out.println(data);
      if (right != null) {
       right.show();
      }
     }

     public static void main(String[] args) {
      MyTree tree = new MyTree(100);
      tree.add(new MyTree(80));
      tree.add(new MyTree(30));
      tree.add(new MyTree(70));
      tree.add(new MyTree(10));
      tree.show();

     }

    }

    ************************************************************************************************************************************************************************************************

    import java.util.ArrayList;
    import java.util.List;

    public class TreeDemo {
     private List<Node> list = new ArrayList<>(); // 所有子节点

     class Node { // 节点
      String data; // 数据
      String parent; // 父级节点

     }

     private void add(String parent, String child) {
      Node node = new Node();
      node.data = child;
      node.parent = parent;
      list.add(node);
     }

     private void findParent(String child) {
      for (int i = 0; i < list.size(); i++) {
       if (list.get(i).data.equals(child)) {
        System.out.println("父节点是==》" + list.get(i).parent);
       }
      }
     }

     public static void main(String[] args) {
      TreeDemo demo = new TreeDemo();
      demo.add("班级", "1班");
      demo.add("班级", "2班");
      demo.add("班级", "3班");
      demo.add("1班", "小黑1");
      demo.add("1班", "小黑2");
      demo.add("1班", "小黑3");
      demo.add("2班", "小白1");
      demo.add("2班", "小白2");
      demo.add("2班", "小白3");
      demo.add("3班", "小黄1");
      demo.add("3班", "小黄2");
      demo.add("3班", "小黄3");
      demo.add("3班", "小黄4");

      demo.findParent("小黑1");
      demo.findChild("3班");

     }

    }


     

  • 相关阅读:
    接口缓存--把接口放在redis数据库中,减少访问量
    使用vue和drf后台进行登录页面和注册页面(本文大概的疏通一下前后台是怎么交互的)
    vue导入css,js和放置html代码
    存储过程
    触发器
    视图
    pymysql模块使用
    权限管理
    多表数据查询
    单表数据查询
  • 原文地址:https://www.cnblogs.com/WillimTUrner/p/8073329.html
Copyright © 2011-2022 走看看