数据结构_红黑树与List集合_介绍&常用方法

红黑树
二叉树:binary tree ,是每个结点不超过2的有序树( tree )
简单的理解,就是一种类似于我们生活中树的结构,只不过每个结点上都最多只能有两个子结点。
二叉树是每个节点最多有两个子树的树结构。顶上的叫根结点,两边被称作"左子树"和“右子树”。

生活中的树

 

 

 

计算机中的树(倒着)

 

 

 二叉树:分支不能超过两个

 

排序树/查找树
在二叉树的基础上元素是有大小顺序的左子树小右子树大

猜数字小游戏:1-100之间的数字,从50开始猜,一下减去一半元素是有大小顺序的

 

 

 

 

 

 

 

 

 

红黑树:
特点:趋*于*衡树,查询的速度非常的快,查询叶子节点最大次数和最小次数不能超过2倍

 

约束:
1节点可以是红色的或者黑色的⒉根节点是黑色的
3.叶子节点(空节点是黑色的
4.每个红色的节点的子节点都是黑色的5.任何一个节点到其每一个叶子节点的所有路径上黑色节点数相同

 

 

 

 

 

 

 

 

 

 

 

 

List集合


我们掌握了Collection接口的使用后,再来看看Collection接口中的子类,他们都具备那些特性呢?

接下来,我们一起学习Collection中的常用几个子类( java.util.List 集合、java.util.Set 集合)。

 

List接口介绍

java.util.List接口继承自collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象称为List集合。在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素。另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。

看完API,我们总结一下∶List接口特点:

1.它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)。

2.它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。

3.集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。

tips:我们在基础班的时候已经学习过List接口的子类java.util.ArrayList类,该类中的方法都是来自List中定义。

常用方法

package List_Demo01;

import java.util.ArrayList;
import java.util.Iterator;

/*
java.util.list接extends collection接口list接口的特点:
1.有序的集合,存储元素和取出元素的顺序是一致的(存储123取出123)
2.有索引,包含了一些带索引的方法
3.允许存储重复的元素
list接口中带索引的方法(特有)
- public void add(int index,E eLement):将指定的元素,添加到该集合中的指定位置上。
- public E get(int index):返回集合中指定位置的元素。
- public E remove(int index):移除列表中指定位置的元素,返回的是被移除的元素。
- public E set(int index,E eLement) :用指定元素替换集合中指定位置的元素,返回值的更新前的元素。注意:
操作索引的时候,一定要防止索引越界异常
注意:
操作索引的时候,一定要防止索引越界异常
IndexoutofBoundsException:索引越界异常,
集合会报ArrayIndexoutofBoundsException :
数组索引越界异常stringindexoutofBoundsException:
字符串索引越界异常
 */
public class Demo01_List {
    public static void main(String[] args) {
        //创建一个List集合对象,多态
        ArrayList<String> list = new ArrayList<>();
        //使用add方法往集合中添加元素
        list.add("q");
        list.add("w");
        list.add("e");
        list.add("r");
        list.add("f");
        list.add("d");
        //打印集合
        System.out.println(list);//[q, w, e, r, f, d] 不是地址重写了toString

        //- public void add(int index,E eLement):将指定的元素,添加到该集合中的指定位置上。
        //在e和r之间添加一个欢迎来到英雄联盟,全军还有30秒后到达战场
        list.add(3,"欢迎来到英雄联盟,全军还有30秒后到达战场");
        System.out.println(list);
        //- public E remove(int index):移除列表中指定位置的元素,返回的是被移除的元素。
        String remove = list.remove(3);
        System.out.println("被移除的元素"+remove);
        System.out.println(list);

        // public E set(int index,E eLement) :用指定元素替换集合中指定位置的元素,返回值的更新前的元素
        //把最后一个d替换为ADC
        String SetE = list.set(7,"ADC");
        System.out.println("被替换的元素"+SetE);
        System.out.println(list);

        // public E get(int index):返回集合中指定位置的元素。
        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            System.out.println(s);
        }
        System.out.println("--------------------------");
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            String next = iterator.next();
            System.out.println(next);
        }
        System.out.println("------------------------");
        //使用增强
        for (String p : list){
            System.out.println(p);
        }


    }
}

 

posted @ 2022-07-06 15:57  zj勇敢飞,xx永相随  阅读(36)  评论(0编辑  收藏  举报