集合框架 (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班");

 }

}


 

原文地址:https://www.cnblogs.com/WillimTUrner/p/8073329.html