Java集合进阶

集合体系结构

在这里插入图片描述
在这里插入图片描述

Collection

在这里插入图片描述
迭代器对象的演示代码:

package kl003;

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

public class demo2 {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        coll.add("ddd");
        //获取迭代器对象
        Iterator<String> it = coll.iterator();;
        //利用循环遍历集合中的每一个元素
        while (it.hasNext()){
            //获取指针并移动指针
            String str = it.next();
            System.out.println(str);
        }
        //上面循环结束的时候指针已经指向没有元素的位置
        //迭代器遍历完集合后,指针不会复位
        //如果还想遍历第二次就必须获取新的迭代器对象
        //循环中只能调用一次next方法
        //迭代器对象遍历的时候不能使用集合对象的方法修改和删除
        //如果要删除,可以用迭代器的方法删除

    }
}

迭代器的总结:
在这里插入图片描述
增强for遍历
在这里插入图片描述
增强for的细节:
在这里插入图片描述
增强for循环的演示代码

package kl003;

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

public class demo3 {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        coll.add("ddd");
        //利用增强for遍历集合
        //注意点:s是一个第三方变量,代表集合中的每一个数据
        for (String s : coll) {
            System.out.println(s);
        }
    }
}

运行结果:
aaa
bbb
ccc
ddd
Lambda表达式遍历
在这里插入图片描述
Collection总结
在这里插入图片描述
Collection包含了list
在这里插入图片描述
和Collection一样同为接口类
list的演示代码

package kl003;

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

public class ListDemo1 {
    public static void main(String[] args) {
        //创建一个集合
        List<String> list = new ArrayList<>();
        //添加元素
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        //插入指定元素
        //细节:原来索引的元素会一次往后移动
        list.add(1,"kkk");
        //删除指定元素,并返回被删除的元素
        //细节:原来索引的元素会依次往前移动
        String remove = list.remove(1);
        System.out.println(remove);
        //set方法修改集合索引的指定元素,返回被修改的元素
        String result = list.set(0,"QQQ");
        //get方法获取指定索引的元素
        String s = list.get(1);
        System.out.println(s);
        //打印集合
        System.out.println(list);
    }
}

package kl003;

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

public class ListRemoveDemo1 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        //删除元素
        //list.remove(1);这是为自动装箱,优先调用实参一致的方法
        //手动装箱

        Integer i = Integer.valueOf(1);
        list.remove(i);
        System.out.println(list);

    }
}

list集合的遍历方式
在这里插入图片描述
list的五种遍历方式的演示代码

package kl003;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.function.Consumer;

public class ListDemo2 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        System.out.println("迭代器遍历");
        //迭代器遍历
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }
        //增强for循环遍历
        System.out.println("增强for循环遍历");
        for (String s : list) {
            System.out.println(s);
        }
        System.out.println("Lambda表达式遍历");
        //Lambda表达式遍历
        list.forEach(string->System.out.println(string));
        //普通遍历
        System.out.println("普通遍历");
        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            System.out.println(s);
        }
        //列表迭代器
        System.out.println("列表迭代器遍历");
        ListIterator<String> it2 = list.listIterator();
        while (it2.hasNext()){
            String s = it2.next();
            if ("bbb".equals(s)){
                //添加元素
                it2.add("qqq");
            }
        }
        System.out.println(list);
    }
}

五种遍历方式的对比
在这里插入图片描述
在这里插入图片描述
数据结构:
扩展的分块查找:
不同的业务场景采用不同的数据结构
在这里插入图片描述
常见的数据结构:
在这里插入图片描述
数据结构(栈)
在这里插入图片描述
数据进出入栈
在这里插入图片描述
在这里插入图片描述
数据结构(队列)
在这里插入图片描述
队列和栈的总结
在这里插入图片描述
数组
在这里插入图片描述

数组的弊端:
在这里插入图片描述
在这里插入图片描述
查询块,增删慢的模型
链表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
单向链表和双向链表
在这里插入图片描述
对上述数据结构模型的总结
在这里插入图片描述
ArrayList集合底层原理
在这里插入图片描述
一次添加一个元素
一次添加一堆元素
在这里插入图片描述
在这里插入图片描述
linkedlist集合
在这里插入图片描述
泛型
在这里插入图片描述
泛型代码演示

package kl002;

import java.sql.Array;
import java.util.ArrayList;
import java.util.Iterator;

public class GengericsDemo1 {
    public static void main(String[] args) {
        //没有泛型的时候,集合如何存储数据
        //创建集合对象
        //获取数据的时候,无法获取特有行为
        ArrayList<String> list = new ArrayList();
        //添加数据
        //list.add(123);
        list.add("aaa");
        //list.add(new Student());
        //遍历集合获取集合里面的每一个数据
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            String str = it.next();
            System.out.println(str);
        }
    }
}

泛型的细节:
在这里插入图片描述
Arraylist泛型演示代码

package kl002;

import java.util.Arrays;

public class MyArrayList<E> {
    Object[] obj = new Object[10];
    int size;
    //E代表不确定类型,e代表形参类型
    public boolean add(E e){
        obj[size] = e;
        size++;
        return true;
    }
    public E get(int index){
        return (E)obj[index];
    }

    @Override
    public String toString() {
        return Arrays.toString(obj);
    }
}

package kl002;

public class GengericsDemo2 {
    public static void main(String[] args) {
        /*MyArrayList<String> list = new MyArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        System.out.println(list);*/
        //同理<Integer><double>
        MyArrayList<Integer> list = new MyArrayList<>();
        list.add(123);
        list.add(478);
        list.add(910);
        int i = list.get(0);
        System.out.println(i);
        System.out.println(list);
    }
}

运行结果:
123
[123, 478, 910, null, null, null, null, null, null, null]
泛型方法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
泛型方法的练习

package kl004;

import java.util.ArrayList;

public class demo1 {
    //定义一个工具类:listutil
    public static void main(String[] args) {
        ArrayList<String> list1 = new ArrayList<>();
        //添加元素
        Listutil.addAll(list1, "aaa", "aaa", "aaa", "aaa");
        ArrayList<String> list2 = new ArrayList<>();
        Listutil.addAll(list2, "bbb", "bbb", "bbb", "bbb");
        System.out.println(list1);
        System.out.println(list2);
    }
}

package kl004;

import java.util.ArrayList;

public class Listutil<E> {
    private Listutil(){

    }
    // public static <E> void addAll(ArrayList<E> list,E...e)
    //添加未知数量的元素
    //可变参数
    public static <E> void addAll(ArrayList<E> list,E e1,E e2,E e3,E e4){
        list.add(e1);
        list.add(e2);
        list.add(e3);
        list.add(e4);
    }
}

运行结果:
[aaa, aaa, aaa, aaa]
[bbb, bbb, bbb, bbb]
泛型接口:
在这里插入图片描述

package kl004;

import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class MyArrayList implements List<String> {
    @Override
    public int size() {
        return 0;
    }

    @Override
    public boolean isEmpty() {
        return false;
    }

    @Override
    public boolean contains(Object o) {
        return false;
    }

    @Override
    public Iterator<String> iterator() {
        return null;
    }

    @Override
    public Object[] toArray() {
        return new Object[0];
    }

    @Override
    public <T> T[] toArray(T[] a) {
        return null;
    }

    @Override
    public boolean add(String string) {
        return false;
    }

    @Override
    public boolean remove(Object o) {
        return false;
    }

    @Override
    public boolean containsAll(Collection<?> c) {
        return false;
    }

    @Override
    public boolean addAll(Collection<? extends String> c) {
        return false;
    }

    @Override
    public boolean addAll(int index, Collection<? extends String> c) {
        return false;
    }

    @Override
    public boolean removeAll(Collection<?> c) {
        return false;
    }

    @Override
    public boolean retainAll(Collection<?> c) {
        return false;
    }

    @Override
    public void clear() {

    }

    @Override
    public String get(int index) {
        return "";
    }

    @Override
    public String set(int index, String element) {
        return "";
    }

    @Override
    public void add(int index, String element) {

    }

    @Override
    public String remove(int index) {
        return "";
    }

    @Override
    public int indexOf(Object o) {
        return 0;
    }

    @Override
    public int lastIndexOf(Object o) {
        return 0;
    }

    @Override
    public ListIterator<String> listIterator() {
        return null;
    }

    @Override
    public ListIterator<String> listIterator(int index) {
        return null;
    }

    @Override
    public List<String> subList(int fromIndex, int toIndex) {
        return List.of();
    }

}

package kl004;

import kl002.MyArrayList;

public class MyArrayListTest {
    public static void main(String[] args) {
    /*
    泛型接口的两种使用方式
    1.实现类给出具体的类型
    2.实现类延续泛型,创建实现类对象再确定类型
    */
        MyArrayList list = new MyArrayList();
    }
}

package kl004;

import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class MyArrayList2<E> implements List<E> {
    @Override
    public int size() {
        return 0;
    }

    @Override
    public boolean isEmpty() {
        return false;
    }

    @Override
    public boolean contains(Object o) {
        return false;
    }

    @Override
    public Iterator<E> iterator() {
        return null;
    }

    @Override
    public Object[] toArray() {
        return new Object[0];
    }

    @Override
    public <T> T[] toArray(T[] a) {
        return null;
    }

    @Override
    public boolean add(E e) {
        return false;
    }

    @Override
    public boolean remove(Object o) {
        return false;
    }

    @Override
    public boolean containsAll(Collection<?> c) {
        return false;
    }

    @Override
    public boolean addAll(Collection<? extends E> c) {
        return false;
    }

    @Override
    public boolean addAll(int index, Collection<? extends E> c) {
        return false;
    }

    @Override
    public boolean removeAll(Collection<?> c) {
        return false;
    }

    @Override
    public boolean retainAll(Collection<?> c) {
        return false;
    }

    @Override
    public void clear() {

    }

    @Override
    public E get(int index) {
        return null;
    }

    @Override
    public E set(int index, E element) {
        return null;
    }

    @Override
    public void add(int index, E element) {

    }

    @Override
    public E remove(int index) {
        return null;
    }

    @Override
    public int indexOf(Object o) {
        return 0;
    }

    @Override
    public int lastIndexOf(Object o) {
        return 0;
    }

    @Override
    public ListIterator<E> listIterator() {
        return null;
    }

    @Override
    public ListIterator<E> listIterator(int index) {
        return null;
    }

    @Override
    public List<E> subList(int fromIndex, int toIndex) {
        return List.of();
    }
}

泛型的继承和通配符
泛型不具备继承性,但是数据具备继承性

泛型演示代码

package kl004;

import java.util.ArrayList;

public class GenericsDemo1 {
    public static void main(String[] args) {
        //泛型不具备继承条件,但是数据具备继承条件
        //创建集合对象
        ArrayList<Ye> list1 = new ArrayList<>();
        ArrayList<Fu> list2 = new ArrayList<>();
        ArrayList<Zi> list3 = new ArrayList<>();
        //调用method方法
        //只能传达list1
        method(list1);
    }
    public static void method(ArrayList<Ye> list){

    }
}
class Ye{}
class Fu extends Ye{}
class Zi extends Fu{}

泛型的通配符:
在这里插入图片描述

泛型的通配符应用场景:
在这里插入图片描述
在这里插入图片描述

package kl005;

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
    ArrayList<TDog> list1 = new ArrayList<>();
    ArrayList<HDog> list2 = new ArrayList<>();
    ArrayList<Lcat> list3 = new ArrayList<>();
    ArrayList<Fcat> list4 = new ArrayList<>();
    keepPet(list3);
    keepPet(list4);
    }
    public static void keepPet(ArrayList<? extends Cat> list){

    }
}

package kl005;

public class HDog extends Dog{
    @Override
    public void eat() {
        System.out.println("一只叫做" + getName() + "的" + getAge() + "岁的哈士奇,正在吃骨头,边吃边拆家");
    }
}

package kl005;

public class TDog extends Dog{
    @Override
    public void eat() {
        System.out.println("一只狗叫做" + getName() + "的"+getAge()+"x岁的土狗,正在吃骨头");
    }
}

package kl005;

public abstract class Dog extends Animal{
}

package kl005;

public class Lcat extends Cat{
    @Override
    public void eat() {
        System.out.println("一只猫叫做" + getName() + "的"+getAge()+"x岁的狸花猫,正在吃鱼");
    }
}

package kl005;

public class Fcat extends Cat{
    @Override
    public void eat() {
        System.out.println("一只猫叫做" + getName() + "的" + getAge() + "岁的波斯猫,正在吃猫粮");
    }
}

package kl005;

public abstract class Cat extends Animal{

}

package kl005;

public abstract class Animal {
    private String name;
    private int age;
    public Animal(){

    }
    public Animal(String name,int age){
        this.name=name;
        this.age=age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }
    public abstract void eat();

    public String toString() {
        return "Animal{name = " + name + ", age = " + age + "}";
    }
}

泛型:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加节点(二叉查找树):
大的存右边
小的存左边
一样的不存
二叉树的遍历方式:
在这里插入图片描述
前序遍历:
在这里插入图片描述
中序遍历:
在这里插入图片描述
后序遍历:
在这里插入图片描述
层序遍历:
在这里插入图片描述
在这里插入图片描述
数据结构(二叉树)小结:
在这里插入图片描述
在这里插入图片描述
二叉查找树(好处):
提高运行效率
二叉查找树(弊端):
数据结构(平衡二叉树):
在这里插入图片描述
注意:
在这里插入图片描述
数据结构(树)的演变:
在这里插入图片描述
数据结构(平衡二叉树)旋转机制
在这里插入图片描述
左旋:
判断左右旋转的方法,找不平衡点
在这里插入图片描述
旋转前
在这里插入图片描述
旋转后
在这里插入图片描述
在这里插入图片描述
右旋:
在这里插入图片描述
在这里插入图片描述
右旋前:
在这里插入图片描述
右旋后:
在这里插入图片描述
左左:
在这里插入图片描述
在这里插入图片描述
左右:
在这里插入图片描述
先局部左旋,变为左左的情况:
在这里插入图片描述
然后在整体右旋:
在这里插入图片描述
最后得到平衡二叉树

右右:
在这里插入图片描述
一次左旋,就可以得到平衡二叉树:
在这里插入图片描述
右左:
在这里插入图片描述
先局部右旋:
在这里插入图片描述
再整体左旋,得到平衡二叉树
在这里插入图片描述
小结(平衡二叉树)

红黑树
在这里插入图片描述
红黑规则
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加节点规则

在这里插入图片描述
在这里插入图片描述
增删查改的性能很不错
在这里插入图片描述
HashSet底层原理
在这里插入图片描述
在这里插入图片描述

package kl001;

import java.util.Objects;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }
}

package kl001;

import java.util.HashSet;

public class Test {
    public static void main(String[] args) {
        //1.创建对象
        Student s1 = new Student("qq",18);
        Student s2 = new Student("qk",19);
        Student s3 = new Student("kk",20);
        Student s4 = new Student("kk",20);
        //2.创建集合添加学生
        HashSet<Student> hs = new HashSet<>();
        //3.添加
        System.out.println(hs.add(s1));
        System.out.println(hs.add(s2));
        System.out.println(hs.add(s3));
        System.out.println(hs.add(s4));
        //4.打印集合
        System.out.println(hs);
    }
}

记得alt+insert,用IDEA重写hashset方法
String和Integer不需要重写hashset方法
因为JAVA已经重写好了这两个东西
在这里插入图片描述
总结:
在这里插入图片描述
TreeSet的特点:
在这里插入图片描述
在这里插入图片描述

package kl001;

import java.util.Iterator;
import java.util.TreeSet;
import java.util.function.Consumer;

public class TreeSetdemo1 {
    public static void main(String[] args) {
        //1.创建对象
        TreeSet<Integer> ts = new TreeSet<>();
        //2.添加
        ts.add(1);
        ts.add(3);
        ts.add(5);
        ts.add(2);
        ts.add(4);
        //3.遍历集合
        //增强for循环
        for(Integer t : ts){
            System.out.println(t);
        }
        System.out.println("-----------------------");
        //迭代器
        Iterator<Integer> it = ts.iterator();
        while(it.hasNext()){
            int i = it.next();
            System.out.println(i);
        }
        System.out.println("-----------------------");
        //Lambda表达式
        ts.forEach(i-> System.out.println(i));
    }
}

在这里插入图片描述在这里插入图片描述
谢谢观看!

要成功地进行Xilinx Zynq-7000 SoC的集成开发,你将需要熟悉TLZ7xH-EVM开发板的硬件特性以及相应的软件编程。在此,我们推荐参考以下资源《创龙TLZ7xH-EVM开发板:Xilinx Zynq-7000双核Cortex-A9+Kintex-7》,这将为你的项目提供详尽的支持。 参考资源链接:[创龙TLZ7xH-EVM开发板:Xilinx Zynq-7000双核Cortex-A9+Kintex-7](https://wenku.csdn.net/doc/80nyorov3y) 首先,在硬件编程方面,你需要了解开发板的硬件架构和资源。TLZ7xH-EVM开发板集成了双核ARM Cortex-A9处理器和Kintex-7 FPGA。你应该首先阅读Zynq-7000开发板规格书,了解各个硬件接口和信号引脚的详细信息。根据你的项目需求,进行硬件资源配置,包括配置处理器的时钟频率、电源管理、存储接口以及外设接口等。 其次,在软件编程方面,Xilinx提供了Vivado和SDK套件,用于硬件逻辑设计和软件应用开发。在Vivado中,你需要完成硬件平台的设计和生成,包括创建项目、综合、实现和生成比特流文件。完成硬件设计后,你可以通过Xilinx SDK进行软件编程,创建应用程序和驱动,以与硬件平台交互。编写代码时,你需要参考开发板提供的Demo程序,这些示例程序展示了如何加载和运行用户代码。 确保你具备相关的硬件编程经验,以及掌握至少一种用于嵌入式开发的编程语言,如C/C++。在软件开发过程中,你还需要了解操作系统的选择和配置,比如使用PetaLinux等。 集成开发成功的关键在于硬件和软件的紧密配合,这通常需要进行多次迭代和调试。使用TLZ7xH-EVM开发板上的调试接口,比如JTAG和串口,进行代码调试和性能分析。 在开发过程中,不妨利用创龙科技提供的技术支持和服务,及时解决开发中遇到的问题。此外,你可以利用公司提供的增值服务平台,如定制化开发、培训等,进一步提升开发效率和产品品。 综上所述,通过阅读相关规格书,使用Vivado和SDK进行硬件设计和软件编程,结合创龙科技的技术支持,你将能够高效地完成Zynq-7000 SoC的集成开发任务。对于那些希望深入学习和探索更多高级功能和技巧的读者,我们再次推荐《创龙TLZ7xH-EVM开发板:Xilinx Zynq-7000双核Cortex-A9+Kintex-7》,这份资料不仅帮助你入门,还将引导你掌握更深层次的知识。 参考资源链接:[创龙TLZ7xH-EVM开发板:Xilinx Zynq-7000双核Cortex-A9+Kintex-7](https://wenku.csdn.net/doc/80nyorov3y)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值