Java开发基础_04

news2024/10/7 20:35:00

六. 集合框架

集合接口
Collection
List
ArrayList
vector
linkList
Set
HashSet
TreeSet
LinkedHashSet
Map
HashMap
HashTable
TreeMap

1. Collection接口

  • 集合是java中提供的一种容器,可以用来存储多个数据

  • 集合的体系结构

    • 主要分为两大体系 : Collection和Map
      • Collection表示一组对象
      • Map表示一组映射关系或键值对
    • Collection 根接口,子接口,List Set
    • Collection 接口常用的方法
方法代码
添加add
是否包含contains
删除remove
集合中有几个元素size
集合变成数组toArray
清空集合clear
判断是否为空isEmpty
package com.demo;

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

public class Demo01 {
    public static void main(String[] args) {
        //创建一个Collection
        Collection<String> collection = new ArrayList<>();
        //添加
        collection.add("zzz");
        collection.add("aaa");
        collection.add("bbb");
        System.out.println(collection);

        //集合是否包含
        boolean flag = collection.contains("aaa");
        System.out.println(flag);

        //删除
        boolean removeFlag = collection.remove("zzz");
        System.out.println(removeFlag);
        System.out.println(collection);

        //集合中有几个元素
        int size = collection.size();
        System.out.println(size);

        //集合变成数组
        Object[] objects = collection.toArray();
        for (int i = 0; i < objects.length; i++) {
            System.out.println(objects[i]);
        }

        //清空集合 clear
        collection.clear();
        System.out.println(collection);

        //判断是否为空
        System.out.println(collection.isEmpty());
    }
}

2. Iterator迭代器

  • 遍历获取集合中的所有元素
  • 不是所有的集合都能使用Iterator迭代器,使用前提,集合需要是Iterator接口的子接口或者是实现类,Map是不可以使用Iterator迭代器
  • 注意:不要在使用Iterator迭代器进行迭代时,调用Collection中的remove方法
package com.demo;

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

//Iterator迭代器
public class Demo02 {
    public static void main(String[] args) {
        Collection<String> collection = new ArrayList<>();
        collection.add("小明");
        collection.add("小红");
        collection.add("小黑");
        collection.add("小白");
        //迭代器
        //1.创建迭代器对象
        Iterator<String> iterator = collection.iterator();
        //2.判断下一个位置是否有元素
        while (iterator.hasNext()){
            //3.指向下一个元素,获取出来
            String value = iterator.next();
            System.out.println(value);
        }
    }
}

3. 增强for循环

迭代器代码的一个简化版,底层是迭代器

for(元素的数据类型 变量名:要遍历的集合或数组){操作代码}
//增强for
for (String value:collection){
    System.out.println(value);
}

4. List接口

  • List接口

    • List接口是Collection接口的子接口
    • List集合中存储的数据是有序的,List集合可以有重复元素
    • List接口有很多实现类,底层结构有数组和链表
  • List集合中常用的操作方法

    package com.kgc.Demo01;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Demo01 {
        public static void main(String[] args) {
            List<User> listUser = new ArrayList<>();
            User u1 = new User("Lucy",1);
            User u2 = new User("Lily",2);
            listUser.add(u1);
            listUser.add(u2);
            //遍历集合
            for (User user:listUser){
                System.out.println(user.getName());
            }
            System.out.println("-------");
    
    
            //创建List集合
            List<String> list = new ArrayList<>();
            list.add("王语嫣");
            list.add("aaa");
            //普通for循环遍历
            for (int i = 0; i < list.size(); i++) {
                String s = list.get(i);
                System.out.println(s);
            }
            System.out.println("-------");
    
            //删除方法 remove
            list.remove(1);
            for (int i = 0; i < list.size(); i++) {
                String s = list.get(i);
                System.out.println(s);
            }
            System.out.println("-------");
            list.remove("王语嫣");
            for (int i = 0; i < list.size(); i++) {
                String s = list.get(i);
                System.out.println(s);
            }
        }
    }
    
  • List接口有很多实现类,常用ArrayList , linkList , vector

    • ArrayList
      • 数据存储的结构是数组结构,元素增删慢,查找块
      • 创建的List有三部分:Object数组,size大小,modCount版本
      • 创建List集合后,Object数组初始化大小是0,添加数据大小加1
    package com.kgc.Demo01;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Demo02 {
        public static void main(String[] args) {
            List<String> list = new ArrayList<>();
            //添加10个数据
            for (int i = 1; i <=10; i++) {
                list.add("大数据"+i);
            }
            list.add("linux");
            System.out.println(list);
        }
    }
    
    
    • vector
      • 创建对象时,有四步
        • object数组,elemenrCount元素数量,默认0,modCount版本
    package com.kgc.Demo01;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Vector;
    
    public class Demo03 {
        public static void main(String[] args) {
            List<String> list = new Vector<>();
            //添加10条数据
            for (int i = 1; i <=10; i++) {
                list.add("java"+i);
            }
            list.add("mysql");
            System.out.println(list);
        }
    }
    
    • LinkedList
      • 数组存储的结构是链表(双向)
        • 创建时包含四部分,size元素的数量,first,last,modCount
        • 添加元素时,第一次添加元素的时候,作为首节点和尾结点
        • 再次添加时,在首节点下一个添加一个节点,可以指向上一个节点
    package com.kgc.Demo01;
    
    import java.util.LinkedList;
    import java.util.List;
    
    public class Demo04 {
        public static void main(String[] args) {
            List<String> list = new LinkedList<>();
            //添加3个
            list.add("java");
            list.add("linxu");
            list.add("mysql");
            System.out.println(list);
        }
    }
    

5. ArrayList和Vector的区别

这两个类都实现了 List 接口(List 接口继承了 Collection 接口), 他们都是有序集合

  1. 线程安全:
    Vector 使用了 Synchronized 来实现线程同步,是线程安全的,而 ArrayList 是非线程安全的。
    vector的add方法

  2. 性能:
    ArrayList 在性能方面要优于 Vector。
    因为ArrayList没有使用synchronized加锁, 不加锁, 所以处理速度会快一些

  3. 扩容:
    ArrayList 和 Vector 都会根据实际的需要动态的调整容量, 只不过在 Vector 扩容每次会增加 1 倍, 而ArrayList 只会增加 50%。

    vector扩容:如果不是指定的话,会扩大一倍

    ArrayList扩容:增加1/2的容量

  4. 同步
    Vector类的所有方法都是同步的
    可以由两个线程安全地访问一个Vector对象,但是一个线程访问Vector的话代码要在同步操作上耗费大量的时间。

Arraylist不是同步的,所以在不需要保证线程安全时时建议使用Arraylist

6. ArrayList和Vector,LinkedList的区别

  1. ArrayList:

    ArrayList 是动态数组,动态的意思是可以随时增加数组长度,众所周知,普通数组的长度是定死的,想要增加长度,就必须重新定义一个固定长度的数组,然后在把元素加进去,但是ArrayList可以随意增加或删除元素,这就让我们在操作的时候变得更灵活,动态数组每个元素都有一个下标,也就是标识这个元素的位置,通过这个下标,计算机就可以知道这个元素存放在内存的哪个位置,所以ArrayList 想要遍历查找某个元素的时候很快就能找到!而且,ArrayList也是线程不安全的

  2. LinkedList:

    LinkedList的底层就是用双向链表实现的,因为链表本身是无序的,所以LinkedList 插入或者删除都很快,但是要查找或者遍历的时候就会很慢,因为双向链表每次查找某个元素的时候都会在内部遍历一遍,直到找到那个指定下标的元素为止,另外,LinkedList 的内存占用要比ArrayList大,因为LinkedList除了存储数据之外,还存储了2个指针,一个指向前一个元素,一个指向后一个元素。

  3. Vector:

    总体来说,Vector除了是线程安全的之外,Vector 和 ArrayList 的底层存储结构基本相似,但又不完全相同。

  4. ArrayList和LinkedList区别:

    • 相同点:
      LinkedeList和ArrayList都实现了List接口。
      ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用(references)。

    • 不同点:
      ArrayList底层的实现数组,而LinkedList是双向链表。
      ArrayList进行随机访问所消耗的时间是固定的,因此随机访问时效率比较高。
      LinkedList是不支持快速的随机访问的,但是在插入删除时效率比较高。

  5. ArrayList和Vector区别:

    • 相同点:
      ArrayList和Vector都是用数组实现的。
      默认初始化大小都是10

    • 不同点
      Vector多线程是安全的,而ArrayList不是。Vector类中的方法很多有synchronized进行修饰,这样就导致了Vector在效率上无法与ArrayList相比;
      两个都是采用的线性连续空间存储元素,但是当空间不足的时候,两个类的增加方式是不同的。(ArrayList每次存储时会检查空间大小,不够时会扩充为原来的1.5倍,Vector会扩充为原来空间的2倍)
      Vector可以设置增长因子,而ArrayList不可以。
      ArrayList有三个构造方法,Vector有四个构造方法。

  6. ArrayList,Vector, LinkedList 的存储性能和特性:

    ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数 据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组 元素移动等内存操作,所以索引数据快而插入数据慢,Vector 由于使用了 synchronized 方法(线程安全)

    通常性能上较 ArrayList 差,而 LinkedList 使用双向链表实现存储,按序号索引数 据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插 入速度较快

    ArrayList 在查找时速度快,LinkedList 在插入与删除时更具优势

  7. 总结:

    ArrayList, Vector 底层是由数组实现,LinkedList 底层是由双线链表实现,从底层的实现可以得出它们的性能问题
    ArrayList, Vector 插入速度相对较慢,查询速度相对较快,而LinkedList 插入速度较快,而查询速度较慢
    再者由于 Vevtor 使用了线程安全锁,所以ArrayList 的运行效率高于 Vector

7. Set接口

  • Set接口是Collection子接口

  • Set接口不能重复,是无序的

  • Set的遍历可以使用迭代器和增强for,实现类有 HashSet , TreeSet , LinkedHashSet

    • HashSet
    package com.kgc.Demo02;
    
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Set;
    
    public class Demo01 {
        public static void main(String[] args) {
            Set<String> set = new HashSet<>();
            //添加数据
            set.add("abc");
            set.add("www");
            set.add("efg");
            //增强for循环遍历
            for (String value:set){
                System.out.println(value);
            }
            System.out.println("---------");
            //Iterator迭代器遍历
            //创建对象
            Iterator<String> iterator = set.iterator();
            while (iterator.hasNext()){
                System.out.println(iterator.next());
            }
        }
    }
    
    • TreeSet

    • LinkedHashSet

8. Map接口

  • 一一对应的,这个叫映射

  • java中提供了专门的集合类用来存放这种关系对象,即java.util.Map<K,V> 键值对存储方式

  • Map中的集合不能包含重复的键,值可以重复,每个键只能对应一个值

  • 常用的方法

    1方法
    添加方式put(key , value)
    根据key获取对应value的值get(Object key)
    移除remove(Object key)
    返回map命令所有的keySet< k > keySet()
    返回所有的valueCollection< v > value
    清空clear()
    package com.kgc.Demo02;
    
    import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    public class Demo02 {
        public static void main(String[] args) {
            //创建一个map对象
            Map<String,String> map = new HashMap<>();
            //添加
            map.put("101","Lucy");
            map.put("102","Lily");
            map.put("103","Lilei");
            System.out.println(map);
            //根据key的值获取value
            String s = map.get("103");
            System.out.println(s);
            //移除
            String remove = map.remove("102");
            System.out.println(remove);
            System.out.println(map);
            //获取所有的value
            Collection<String> values = map.values();
            System.out.println(values);
            //获取所有的key
            Set<String> strings = map.keySet();
            System.out.println(strings);
            //清空
            map.clear();
            System.out.println(map);
        }
    }
    
  • Map集合遍历

    • 第一种 获取map里的所有key,根据key获取value
    package com.kgc.Demo02;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    public class Demo03 {
        public static void main(String[] args) {
            Map<String,String> map = new HashMap<>();
            map.put("101","Lucy");
            map.put("102","Lily");
            map.put("103","Lilei");
            //1. 获取所有的key
            Set<String> keys = map.keySet();
            //2. 遍历Set类型的keys
            for (String key:keys){
                String value = map.get(key);
                System.out.println(key+" : "+value);
                //System.out.println(map.get(key));
    
    • 第二种 直接获取map里的key:value关系,获取key和value
            //第二种遍历
            Set<Map.Entry<String, String>> entries = map.entrySet();
            for (Map.Entry<String, String> entry:entries){
                String key = entry.getKey();
                String value = entry.getValue();
                System.out.println(key+" : "+value);
                //System.out.println(entry);
            }
        }
    }
    
    package com.kgc.Demo02;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    /*
    Map的第二种遍历方式:Entry对象遍历
    Map集合中有一个方法 Set<Map.Entry<K,V>>    entrySet() 返回的映射中包含的映射关系Set视图
    实现步骤:
    1. 使用Map集合中的方法entrySet(),把map集合中的多个entry对象取出来,放到一个set集合中
    2. 遍历set集合,获取每一个entry对象
    3. 使用entry对象中的方法,getkey(),getvalue()
    
     */
    public class Demo04 {
        public static void main(String[] args) {
            Map<String,String> map = new HashMap<>();
            map.put("1","张三");
            map.put("2","李四");
            Set<Map.Entry<String, String>> entries = map.entrySet();
            Iterator<Map.Entry<String, String>> it = entries.iterator();
            while(it.hasNext()){
                Map.Entry<String, String> entry = it.next();
                System.out.println(entry.getKey()+" : "+entry.getValue());
            }
            System.out.println("----------");
            for (Map.Entry<String, String> entry1:entries){
                System.out.println(entry1.getKey()+" : "+entry1.getValue());
            }
        }
    }
    
    //练习
    /*
    计算一个字符串,每个字符出现的次数
    如 abcabcaabbccd     a:4 b:4 c:4 d:1
    */
    package com.kgc.Demo02;
    
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Scanner;
    /*
    计算一个字符串,每个字符出现的次数
    如 abcabcaabbccd     a:4 b:4 c:4 d:1
     */
    public class Demo05 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.print("请输入一个字符串:");
            String str = sc.next();
            Map<Character,Integer> map = new HashMap<>();
            //System.out.println(str.toCharArray());
            for(char c:str.toCharArray()){
                //1. 判断字符是否在map集合中key里有没有
                if(map.containsKey(c)){
                    //1. 如果在: 次数+1
                    map.put(c,map.get(c)+1);
                }else{
                    //2. 如果不在: put("a",1)
                    map.put(c,1);
                }
            }
            //System.out.println(map);
            for (Character key:map.keySet()){
                System.out.println(key+"="+map.get(key));
            }
        }
    }
    
  • Collections

    package com.kgc.Demo02;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class Demo06 {
        public static void main(String[] args) {
            List<String> list = new ArrayList<>();
            list.add("小米");
            list.add("苹果");
            list.add("华为");
            list.add("OPPO");
            list.add("vivo");
            for (String s:list){
                System.out.println(s);
            }
            System.out.println("----------");
            //collections里sort排序
            Collections.sort(list);
            for (String s:list){
                System.out.println(s);
            }
            //查询集合中元素的最大值
            System.out.println("最大值:"+Collections.max(list));
            System.out.println("最小值:"+Collections.min(list));
            System.out.println("----------");
            //查询集合中指定的元素,查询下标
            System.out.println(Collections.binarySearch(list,"OPPO"));
            System.out.println("----------");
            //反转倒叙输出
            Collections.reverse(list);
            for (String s:list){
                System.out.println(s);
            }
            System.out.println("----------");
            //往集合中添加元素
            Collections.addAll(list,"111","222","333","444","555");
            for (String s:list){
                System.out.println(s);
            }
            System.out.println("----------");
        }
    }
    

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25120.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【总结】Idea 编译maven项目报错NoSuchMethodError DefaultModelValidator

从网上git clone了一个项目&#xff0c;本地编译compile、打包package都没问题。 但是启动服务&#xff0c;启动不了&#xff0c;且查看Dependency Analyzer 没有任何依赖信息。执行Reimport时&#xff0c;报错如下。 错误信息 org.codehaus.plexus.component.repository.exc…

Git的简单使用

Git的简单使用一、关于版本控制1、文件的版本2、版本控制软件1.本地版本控制系统2.集中化的版本控制系统3.分布式的版本控制系统二、Git的简介1、什么是Git2、SVN的差异比较3、Git的记录快照4、Git中的三个区域5、使用Git的基本流程三、Git的基本操作1、配置Git1. 配置用户信息…

集合~List

List List集合概述和特点 List集合概述 有序集合&#xff08;也称为序列&#xff09;&#xff0c;用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素&#xff0c;并搜索列表中的元素与Set集合不同&#xff0c;列表通常允许重复的元素 List集合特点 …

【JavaSE】String类总结,StringBuilder、StringBuffer、String的区别讲解

文章目录String对象的构造String类的一些常用方法求字符串的长度字符串判空字符串对象的比较字符串对象的查找字符串对象的转化字符串对象的截取字符串对象的替换字符串对象的拆分字符串对象的大小写转换常用方法总结StringBuilder与StringBuffer字符串为什么不可变String Stin…

Alibaba架构师内部最新发布SpringCloud开发手册,Github限时开源

微服务是SOA之后越来越流行的体系结构模式之一&#xff01; 如果您关注行业趋势&#xff0c;就会发现,如今商业机构不再像几年前那样&#xff0c;开发大型应用程序&#xff0c;来管理端到端之间的业务功能&#xff0c;而是选择快速灵活的微服务。 通过微服务&#xff0c;架构师…

寒气难抵,跨境电商年底仍有一批卖家要出局!

2020年初的新冠疫情仍历历在目&#xff0c;跨境电商在这两年间也是经历了许多不同的波折和困难。从2020年到2022年&#xff0c;由于各国之间出于疫情防控等多方面的考虑&#xff0c;逐渐的增加贸易壁垒&#xff0c;致使跨境电商的物流成本大概增长了50%&#xff0c;物流成本占订…

UE4 回合游戏项目 22- 控制新角色

在上一节&#xff08;UE4 回合游戏项目 21- 添加多种类型的敌人&#xff09;基础上新添加一个玩家角色 效果&#xff1a; 步骤&#xff1a; 1.打开进阶游戏资源&#xff0c;解压“回合迁移_第七节&#xff08;只是新人物包&#xff09;” 2.解压后双击打开工程 3.选中“ziyuan…

免费查题接口系统

免费查题接口系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳…

微信小程序 | 小程序开发

&#x1f5a5;️ 微信小程序专栏&#xff1a;小程序开发 初级知识 &#x1f9d1;‍&#x1f4bc; 个人简介&#xff1a;一个不甘平庸的平凡人&#x1f36c; ✨ 个人主页&#xff1a;CoderHing的个人主页 &#x1f340; 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ &#x1f…

51单片机学习笔记2 仿真器的使用及STC89Cxx简介

51单片机学习笔记2 仿真器的使用及STC89Cxx简介&#xff09;一、连接步骤1. 硬件连接2. 安装软件驱动3. 检查是否安装成功二、仿真步骤1. 打开一个51工程2. 选择仿真设备3. Settings设置4. Utilities设置5. 点击仿真三、连接开发板四、STC89Cxx单片机简介1. 单片机2. 51单片机3…

红黑树的插入与验证——附图详解

文章目录红黑树性质红黑树的插入前言寻找插入位置情况 1.0情况 1.1情况 1.2情况 1.3情况 2.0情况 2.1情况 2.2情况 2.3完整代码红黑树的检验验证代码和用例红黑树 上篇文章我们说到 AVL 树在新增 / 减少结点的时候会进行旋转以保持 AVL 树的高度平衡, 但是实际上在需要 频繁加…

【构建ML驱动的应用程序】第 2 章 :制定计划

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

【线程】多线程安全

考点&#xff0c;线程同步有哪些操作&#xff1a; 一、概念 如果一个函数能被多个线程同时调用且不发生竞态条件&#xff0c;则成为它是线程安全&#xff0c;也叫可重入函数。通俗地说就是多线程程序无论调度顺序怎么样都可以得到正确的结果&#xff0c;运行时程序不出错。可重…

2023年浙大MBA项目的后备考阶段三大策略:你永远要相信光的力量

有些人&#xff0c;走着走着就掉队了。距离今年的管理类联考还有一个月时间&#xff0c;一切看似终成定局&#xff0c;但实际上仍有很大转圜空间。对浙大MBA的准考生来说&#xff0c;走到目前这一步&#xff0c;剩下的一个月时间务必要坚持走完&#xff0c;而且要更加的勇敢和底…

SDN功能实现(四)--- 实现自定义action(1)修改OVS源码<队列去重(内核态实现)>

实现功能&#xff1a;设计一个新的action&#xff0c;实现在冗余链路中的数据包去重 一&#xff1a;在内核级定义OVS action &#xff08;一&#xff09;在datapath/linux/compat/include/linux/openvswitch.h中添加&#xff1a; enum ovs_action_attr {/* ... *//** after…

SparkStreaming

sparkstreaming 1.批处理与流处理 spark本身作为引擎时是批处理&#xff0c;从信息源全部读取数据&#xff0c;然后一批一批处理数据。处理sparkSQL等之后再存入hdfs。 sparkstreaming是实时引擎&#xff0c;在一个窗口时间内&#xff08;比如1s&#xff09;积攒数据&#x…

Spring IOC源码:实例化前的准备工作

前言 上篇文章我们讲解了IOC比较重要的后置处理器注册方法&#xff0c;本篇文章讲解实例化前的准备工作&#xff0c;包括国际化、多播器创建、监听器注册等节点。 正文 进入refresh方法中&#xff0c;可以看到在正式实例化初始化方法前&#xff0c;还有4个方法&#xff1a; …

Day09--小程序API的Promise化

1.基于回调函数的异步API的缺点 ************************************************************************************************************** 2.啥子是API Promise化呢&#xff1f; *****************************************************************************…

【Java八股文总结】之MyBatisPlus

文章目录MybatisPlus一、MyBatis Plus介绍1、Mybatis 和 Mybatis Plus 的区别Q&#xff1a;MyBatis的优缺点Q&#xff1a;MyBatis Plus的优点Q&#xff1a;MyBatis-Plus中的lambda表达式&#xff1f;Q&#xff1a;MyBatis中的动态标签有哪些&#xff1f;2、MyBatis Plus常用注解…

ZYNQ之FPGA学习----RAM IP核使用实验

1 RAM IP核介绍 RAM 的英文全称是 Random Access Memory&#xff0c; 即随机存取存储器&#xff0c; 它可以随时把数据写入任一指定地址的存储单元&#xff0c;也可以随时从任一指定地址中读出数据&#xff0c;其读写速度由时钟频率决定 Xilinx 7 系列器件具有嵌入式存储器结…