Java第十六次笔记(强化部分Day05)---集合概述、Collection集合的体系(常用API、遍历方式 )、常见数据结构(栈、队列、数组、链表、二叉树、红黑树)、List集合、并发异常、泛型

目录

一、集合概述 128

总结:

​编辑 二、Collection集合的体系特点 128 

 总结:

三、Collection集合常用API 129

四、Collection集合的遍历方式 129 

 4.1方式一:迭代器 129

技巧:

 总结:

 4.2方式二:foreach/增强for循环 129

收获以及注意:

 总结:

4.3 方式三:Lambda表达式遍历129

 五、Collection集合存储自定义类型的对象 129

 总结:

 六、常见数据结构 130

 6.1数据结构概念、栈、队列 130

数据结构概述 

常见的数据结构 

 栈数据结构的执行特点

队列数据结构的特点 

 6.2数组 130

 6.3链表 130

6.4二叉树、二叉查找树 130 

 6.5平衡二叉树 130

 二叉树查找存在的问题:

平衡二叉树的要求:

6.6红黑树 130

红黑树概念: 

 红黑树规则:

 添加节点:

总结:

 七、List系列集合 131

7.1List集合特点、特有API 131

 List系列集合特点:

 List集合特有方法:

 总结:

 7.2List集合的遍历方式小结 131

7.3ArrayList集合的底层原理 131 

 八、 补充知识:集合的并发修改异常问题  131

解决遍历存在的迭代器删除元素的问题:(代码展示)

 小技巧:

九、补充知识:泛型深入 132

9.1泛型的概述和优势 132

  9.2自定义泛型类 132

 总结:

 9.3自定义泛型方法 132  (学得不好)

总结:

  9.4自定义泛型接口 132 (学的不好)

 总结:

 9.5泛型通配符、上下限 132  (学的不好)


一、集合概述 128

 

 

总结:


 二、Collection集合的体系特点 128 

  

 总结:

三、Collection集合常用API 129

代码展示:


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;

public class CollectionDemo {
    public static void main(String[] args){
        //ArrayList:添加的元素  有序、可重复、有索引
        //HashSet:添加的元素    无序、不重复、无索引
        Collection<String> list = new ArrayList<>();
        Collection<String> list1 = new HashSet<>();
        //1、添加元素,添加成功返回true
        list.add("HTML");
        list1.add("HTML");
        list.add("Java");
        list1.add("Java");
        System.out.println(list.add("HTML"));//对于ArrayList 添加成功返回值为true
        System.out.println(list1.add("HTML"));//对于HashSet  如果添加的是原数组中重复的元素那么返回值为false
        System.out.println(list);
        System.out.println(list1);

        //2、清空集合的元素
//        list.clear();
//        System.out.println(list);

        //3、判断结合是否为空,
//        System.out.println(list.isEmpty());
//        System.out.println(list1.isEmpty());

        //4、获取集合的大小
        System.out.println(list.size());

        //5、判断集合中是否包含某个元素
        System.out.println(list.contains("Java"));
        System.out.println(list1.contains("java"));

        //6、删除某个元素:如果有多个重复的元素默认删除首先出现的元素

        list.remove("java");
        System.out.println(list);
        list1.remove("Java");
        System.out.println(list1);

        //7、把集合转换成数组  [HTML, Java, HTML]  由于原来定义的泛型只是字符串类型,如果我们需要添加一个整型数据类型,那么就需要对其进行转换成数组了
        Object[] arrs = list.toArray();//转换成所有的数据类型
        System.out.println("数组:" + Arrays.toString(arrs));


        System.out.println("-------------拓展----------------");
        //addAll将另外的一个数组中元素放置到另外的一个数组中进行补充添加
        Collection<String> list2 = new ArrayList<>();
        list2.add("xiaoliu");
        list2.add("xiaodong");
        list.addAll(list2);//将list2集合中的元素添加到list当中,进行补充添加
        System.out.println(list);

    }
}

结果展示:

四、Collection集合的遍历方式 129 

 4.1方式一:迭代器 129

 使用循环,对集合中的内容进行查看。

代码展示:

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

public class CollectionDemo1 {
    public static void main(String[] args){
        Collection<String> c = new ArrayList<>();
        c.add("赵敏");
        c.add("小昭");
        c.add("灭绝");
        c.add("素素");
        System.out.println(c);

        //1、得到当前集合的迭代器对象
        Iterator<String> it = c.iterator();//要和集合的泛型进行匹配,集合是String类型的
//        String ele = it.next();//获取集合中元素,并进行输出出来。每使用一次,就会陆续向后读取一个元素内容
//        System.out.println(ele);
//        System.out.println(it.next());
//        System.out.println(it.next());
//        System.out.println(it.next());//超过集合中的元素内容,会出现报错的情况。集合中有几个元素就用几个这个就行,next获取  多了就会出现报错的情况发生
        //2、使用循环进行集合中元素内容的查看
        while (it.hasNext()) {//hasNext()是判断集合中是否有元素存在的一个API,结果和上面的方法一的一样。没有元素有返回值为false
            String ele = it.next();
            System.out.println(ele);
        }
    }
}

结果:

技巧:

在迭代器中的循环当中,不要出现两次next,避免出现错误的情况发生。

 总结:

 4.2方式二:foreach/增强for循环 129

 

收获以及注意:

1、 正确的使用增强的for循环,需要准确记住其格式形式。

2、增强的for循环,可以对集合和数组进行遍历循环

3、快速使用增强for循环,如下所示:

4、修改无意义,不会影响原来集合或者数组的元素值。

本部分的代码展示:

import java.util.ArrayList;
import java.util.Collection;

public class CollectionDemo03 {
    public static void main(String[] args){
        //利用增强的for循环来对集合中的元素进行遍历输出
        Collection<String> c = new ArrayList<>();
        c.add("赵敏");
        c.add("小昭");
        c.add("灭绝");
        c.add("素素");
        System.out.println(c);
        for(String ele : c){
            System.out.println(ele);
        }
        System.out.println("-------------------------");
        //利用增强的for循环来对数组中的元素进行遍历输出
        double[] arr = {10,10.1,20.9,30,30.5};
        for (double v : arr) {
            System.out.println(v);
        }

    }
}

结果: 

 

 总结:

4.3 方式三:Lambda表达式遍历129

 

 五、Collection集合存储自定义类型的对象 129

 

 

 底层原理:

 总结:

 

 六、常见数据结构 130

 6.1数据结构概念、栈、队列 130

数据结构概述 

常见的数据结构 

 栈数据结构的执行特点

 

队列数据结构的特点 

 

 例子:银行的排队叫号系统。

 6.2数组 130

数组是连续排列的区域。长度  

 

 6.3链表 130

结点包含的内容:本次查询的数据内容信息+下一个结点的地址信息(便于下个节点的内容查询) 

 

 

6.4二叉树、二叉查找树 130 

 

 

普通的二叉树:节点的数据是混乱的。

二叉查找树:左侧的数据小,右侧的数据大。 

 

 6.5平衡二叉树 130

 二叉树查找存在的问题:

 

平衡二叉树的要求:

 

 具体的情况查看视频130的旋转的四种情况。

6.6红黑树 130

红黑树概念: 

 红黑树规则:

 添加节点:

对于添加节点是红色效率高做出解释说明:

添加三个元素 18 20 23

下面将添加的节点作为黑色

下面是将添加的节点作为红色

 其中红黑树需要进行再次的学习,观看视频130 45分钟-50分钟左右

总结:

七、List系列集合 131

7.1List集合特点、特有API 131

 List系列集合特点:

 

 List集合特有方法:

 

 总结:

 7.2List集合的遍历方式小结 131

 遍历数据:这四种的方式都没有差别,都可以用。

如果有其他的要求,所以根据每种方式的特点进行选择确定方式。

 遍历位置:使用for循环

7.3ArrayList集合的底层原理 131 

当需要扩容时,会扩大到原来的1.5倍 ,将原来的元素 进行迁移到新的集合中。

该部分的内容使用,其实实际上是进行栈和队列的表示。

如果表示为栈,就是用 入栈addFirst()方法 等同于push   出栈.remove()   等同于pop()

代码如下所示:

        LinkedList<String> list = new LinkedList<>();
        //栈  先进后出
        //入栈
        list.addFirst("第一颗子弹");
        list.addFirst("第二颗子弹");
        list.addFirst("第三颗子弹");
        list.addFirst("第四颗子弹");
        System.out.println(list);

        System.out.println(list.getFirst());
        //出栈
        System.out.println(list.removeFirst());

结果如下所示:

如果表示为队列,就是用    入栈addLast()方法   offLast()表示入队

代码如下所示:

        //队列
        LinkedList<String> list1 = new LinkedList<>();

        //入队  先进先出
        list1.addLast("1号");
        list1.addLast("2号");
        list1.addLast("3号");
        list1.addLast("4号");
        System.out.println(list1);

        System.out.println(list1.getFirst());
        //出栈
        System.out.println(list1.removeLast());

 结果如下所示:

LinkedList集合的底层:

 

 

 八、 补充知识:集合的并发修改异常问题  131

 

解决遍历存在的迭代器删除元素的问题:(代码展示)

遍历:迭代器、增强for循环、foreach()、这三种都会出现并发错误,foreach的底层原理实际上是用增强for循环进行得到的。

for循环,会出现漏删的情况发生。但是有两种解决的方案。

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

public class Test {
    public static void main(String[] args){
        List<String> list = new ArrayList<>();
        list.add("黑马");
        list.add("Java");
        list.add("Java");
        list.add("赵敏");
        list.add("赵敏");
        list.add("素素");
        System.out.println(list);

        //需求:删除所有的某一元素内容,   本案例所删除的是Java
        //a、使用迭代循环来检验相关的元素内容,找到相应的元素内容对其进行删除
        Iterator<String> iterator = list.iterator();
        while(iterator.hasNext()){//检查元素的内容
            String ele = iterator.next();
            if("Java".equals(ele)){
//                list.remove("Java");//这个会出现报错的问题,是由于remove()方法删除了Java会影响后面的元素内容的索引值,就会出现报错情况发生
                iterator.remove();//使用迭代器进行删除,不会影响后面的元素内容索引发生变化。
            }

        }
        System.out.println(list);

    }
}

 结果:

小技巧:

快捷键生成迭代器:先输入list.iterator()  在 ctrl+alt+v  即可生成。

九、补充知识:泛型深入 132

9.1泛型的概述和优势 132

 

9.2自定义泛型类 132

作用:统一数据类型。

 总结:

 9.3自定义泛型方法 132  (学得不好)

 

总结:

 

  9.4自定义泛型接口 132 (学的不好)

 总结:

 9.5泛型通配符、上下限 132  (学的不好)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值