当前位置: 首页 > 编程日记 > 正文

[转]Java中常用的集合—初学者的你不可错过的精编整理

集合一直都是项目中非常常见的,我是一个Android开发者,集合对于我来说,在项目中使用的次数非常之多,因为使用的多,熟能生巧,所以这里呢!就给那些初学者整理一下Java当中常用的集合吧! 
  因为此篇文章是给初学者看到,所以对于集合的认识,我们就不从内存的角度去分析了,等你Java学到一定的时候,再去学习一下集合的底层实现,这会让成为一名更加牛的Java程序员。 
  在整理之前呢,我们先聊一聊为什么集合会这么常用?,集合这个概念,我们初次接触是在高中的数学当中,高中的集合具有以下知识点: 
  1、集合的含义:某些指定的对象集在一起就成为一个集合,其中每一个对象叫元素。

2、集合的中元素的三个特性:

①.元素的确定性;②.元素的互异性;③.元素的无序性

说明: 
  (1)对于一个给定的集合,集合中的元素是确定的,任何一个对象或者是或者不是这个给定的集合的元素。

(2)任何一个给定的集合中,任何两个元素都是不同的对象,相同的对象归入一个集合时,仅算一个元素。

(3)集合中的元素是平等的,没有先后顺序,因此判定两个集合是否一样,仅需比较它们的元素是否一样,不需考查排列顺序是否一样。 
  高中的集合理解起来很简单,高中的集合里面放到是一个一个具体的对象,集合当中对象与对象之间是不一样的,而且集合中对象的元素是杂乱无章的,顺序没有什么规律可循,因为高中集合是无序性的。那么Java当中的集合是否又和高中的集合的概念是一致的呢?答案肯定不是啦,因为Java当中的集合是基于数据结构实现的,这些数据结构包括有:数组,链表,队列,栈,哈希表,树……等等,而高中的集合显然和这搭不上边,如果你不太懂这些数据结构,那么学起集合来可以说是非常吃力的,所以在学集合之前,请先小小的理解一些数据结构,因为你要想成为一名Java开发大神,数据结构你必须拿下!这里我贴一个数据结构自学的教学视频: 
  链接:http://pan.baidu.com/s/1jI1azD8 密码:4725 
  我也是通过里面郝斌的数据结构视频才把数据结构掌握的,尽管我大学数据结构课打酱油,但是看这个视频,只要认真,掌握真是小case! 
  闲话我们也唠完了,下面进入正题,总结Java当中常用的集合: 
  首先,提出一个接口Collection,这个接口很多集合都有实现它,而Java常用的集合包括List,Set,以及Map。而List,Set和Map都是接口,其中List接口,Set接口是继承了Collection接口,而Map接口是没有继承Collection接口,原因很简单,因为List和Set集合一般放的单个对象,Map放的是键值对,也就是成对的两个对象,键值对就是可以根据一个键值获得对应的一个值,因为Collection不具备这种特点,所以Map并没有继承Collection。值得一提的是Java的集合持有的并不是对象本身,而是一个指向对象的引用,集合当中放的全部都是引用,如果你现在还不理解这句话,那就暂时不去理解,等你学到一定阶段,再回头来理解理解也是可以的,但是请不要把过多的疑问留到以后,要想成为一名牛的Java程序员,当天的疑问当天来解决,只要你有这个习惯,不管是学习什么,最后你一定会成为很牛的人,写着写着又在乱扯,那么继续回到正题,根据前面对集合的几个接口的描述,所以有如下继承图:

https://img3.mukewang.com/5adc73d10001c8b609080683.jpg 

1.List集合:有序可重复

有序可重复:顺序是按照放入的顺序排列的,可重复指的是可以放入一样的元素 
  实现了接口该接口的集合:ArrayList,LinkedList,Vector 
   [1]ArrayList 
     底层:使用数组实现 
     特点:查找效率高,随机访问效率高,增删效率低,非线程安全的 
    说明:由于ArrayList底层是有数组实现的,那么也就意味着在内存当中是一个有一个连续的内存空间构成,学过数据结构的肯定知道,因为是这种连续,会让访问效率变得非常之高,但也会带来一个问题,当你往中间插入一个元素,那么插入的位置之后的元素,都要往后移动,如果后面的元素有很多,这显然会让效率大大降低,那么删除呢?也同样面临同样的效率问题,因为当你删除中间的某个元素,位于这个删除的元素之后的位置的所有元素都要往前移动,查询呢?因为随机访问效率很高,所以查询的效率非常可观。看看下面的ArrayList的添加和删除: 
 
 
接下来就是代码部分了,数据结构的操作从四个方面着手:增删改查,以下代码只是基本的操作,实现List接口的集合具备有很多操作,我只是列举了一些基本操作,要想详细了解,请查看API,我这里给你Java API1.6中文版链接:http://pan.baidu.com/s/1eSIJ9zc 密码:wjx1

//生成arrayList实例对象    ArrayList<String> arrayList = new ArrayList<String>();//ArrayList的添加:  arrayList.add("a"); //在末尾添加元素   arrayList.add("b");  arrayList.add("c");  arrayList.add("d");  arrayList.add("e");  arrayList.add(2,"f");//在指定位置插入元素  //ArrayList的删除  arrayList.remove(2);//移除下标为2的元素  //ArrayList的修改  arrayList.set(0,"a");//把下标为1的元素修改为元素"a"  //ArrayList的查询,这里需要遍历ArrayList  
//普通for语句遍历  
for(int i=0;i<arrayList.size();i++){  if(arrayList.get(i).equals("a")){  System.out.println("该集合当中存在a元素,并且位置在第"+(i+1));  }  
}  //foreach语句遍历  
for(String str:arrayList){  if(str.equals("a")){  System.out.println("该集合当中存在a元素");//输出其位置就要另外添加变量了  }  
}    //迭代器方式:  
Iterator<String> intertor = arrayList.iterator();  
while(intertor.hasNext()){  if(intertor.next().equals("a")){  System.out.println("该集合当中存在a元素");     }  
}

[2]LinkedList 
     底层:使用双向循环链表实现 
     特点:查找效率低,随机访问效率低,增删效率高,非线程安全的 
    说明:由于LinkedList底层是由双向循环链表实现的,那么这就意味着,内存当中,它存储的每一个元素的内存空间不是连续的,这给查询和访问,带来了不便,但是也存在着极大的好处,就是增删效率远远高于ArrayList,因为学过数据结构的都知道,链表的增删只需要修改指针指向就可以了,不会像数组那样每次删除,都需要元素配合进行移动,LinkedList并不需要每个元素进行移动,光说你肯定是不会理解的,那么看看下面的LinkedList的添加和删除:    
代码部分我就不写了,因为在代码上LinkedList的增删改查与ArrayList是一样的。 
  [3]Vector 
    说明:这个集合和ArrayList相似,但是它具有一些集合都不具有的特点,最大的不同之处,它跟枚举有关系。还要很重要的一点,Vector是线程安全,因为是线程安全的,所以效率上比ArrayList要低。这里就不具体介绍Vector了,因为用到的并不多,但也有可能会使用到。详细了解看Java API。

2.Set集合:无序不可重复

无序不可重复:无序指的是Set集合的排列顺序并不会按照你放入元素的顺序来排列,而是通过某些标准进行排列,不可重复指的是Set集合是不允许放入相同的元素,也就是相同的对象,对象相同是怎么判断的呢?Set集合是通过两个方法来判断其元素是否一样,这两个方法就是hashCode()方法和equlas()方法,首先,hashCode()方法返回的是一个哈希值,这个哈希值是由对象在内存中的地址所形成的,如果两个对象的哈希值不一样,那么这两个对象肯定是不相同的,如果哈希值一样,那么这还不能肯定这两个对象是否一样,还需要通过equlas()方法比较一下两个对象是否一样,equals()返回true才能说明这两个对象是相同的,所以当你想把你自定义的类对象放入此集合,最好重写一下hashCode()方法和equals()方法来保证Set集合”无序不可重复”的特点。判断两个对象是否一样是通过以下图片当中的流程,图片会让你更加理解。 
 
  [1]HashSet 
     底层:使用哈希表实现 
     特点:非线程安全的,放入对象后,其对象的位置与对象本身的hashCode()方法返回的哈希值有关。判断重不重复,是通过对象本身的hashCode()方法和equals()方法决定的,所以当你想把你自定义的类对象放入此集合,最好重写一下hashCode()方法和equals()方法。 
接下来,就是演示如何使用这个HashSet集合了,还是从4个方面着手:增删改查

//HashSet的操作
//生成HashSet的实例对象HashSet<String> hashSet = new HashSet<String>();//HashSet的增加hashSet.add("1");hashSet.add("2");hashSet.add("3");hashSet.add("4");hashSet.add("5");//HashSet的删除hashSet.remove("2");//HashSet的修改//因为HashSet的元素不存在通过下标去访问,所以修改操作是没有的//HashSet的查询//foreach语句方式for(String str:hashSet){if(str.equals("a")){System.out.println("该集合中存在a元素");}}//迭代器方式:
Iterator<String> intertor1 = hashSet.iterator();
while(intertor1.hasNext()){if(intertor1.next().equals("a")){System.out.println("该集合当中存在a元素");   }
}

[2]TreeSet 
     底层:使用树实现 
     特点:非线程安全的,排序规则是默认使用元素的自然排序,或者根据实现Comparable接口(比较器)的compareTo()方法进行排序。判断重不重复也是通过compareTo()方法来完成的,当compareTo()方法返回值为0时,两个对象是相同的。所以存入TreeSet集合的对象对应的类一定要实现Comparable接口。 
    代码我就不写了,因为TreeSet集合的增删改查操作基本与HashSet一样,但是必须详细说明一下,如果你想把自己定义的类放入TreeSet集合,那么那个自定义类必须支持自然排序,说得明白点,就是一定要实现Comparable接口(比较器接口)。下面写个例子,比如:需要在TreeSet集合当中放入10个Student对象,实现通过年龄进行排序,然后按照年龄的顺序输出者10个Student对象的信息。分析一下,其实这个例子就是让你封装的自定义的类,在运用于TreeSet集合的时候能够保证其唯一性和某个排序规则。所以你在封装你的自定义类的时候一定考虑两点: 
1.唯一性的判断:假设有两个Student类对象a和Student类对象b,你得保证把a和b对象放入TreeSet集合的时候,a和b是不同的对象,那么凭借什么来判断呢?假设Student有name,age属性,判断两个Student对象一样,那么就是判断name属性和age属性是否一样,换句话说,当两个对象一样的时候,这两个对象的所有属性都是相同的。这个判断需要你的自定义类实现Comparable接口(比较器接口),然后重写compareTo()方法,当这个方法返回0的时候,意味着被比较的两个对象是相同的。 
2.排序规则:TreeSet的排序规则也是需要自定义类实现Comparable接口(比较器接口),然后重写compareTo()方法,当这个方法返回正值的时候,意味着前面的对象大于后面的对象,否则,意味着前面的对象小于后面的对象。 
下面是详细的代码:

import java.util.TreeSet;public class StudentTreeSetDemo {public static void main(String[] args) {TreeSet<Student> treeSet = new TreeSet<Student>();treeSet.add(new Student("a", 1));treeSet.add(new Student("b", 2));treeSet.add(new Student("c", 3));treeSet.add(new Student("d", 5));treeSet.add(new Student("e", 3));treeSet.add(new Student("f", 7));//放入相同的treeSet.add(new Student("d", 5));treeSet.add(new Student("e", 3));treeSet.add(new Student("b", 2));for(Student student:treeSet){student.allMessage();}}}class Student implements Comparable<Student>{
public String name;
public int    age;public Student(String name,int age ) {this.name = name;this.age = age;
}public void allMessage(){System.out.println("学生名字:"+name+",学生年龄:"+age);
}@Override
public int compareTo(Student o) {//排序规则:按照年龄进行排序return age - o.age != 0?age - o.age:(name.equals(o.name)?0:1);
}}

还要一个需要了解的Set集合,LinkedHashSet集合: 
LinkedHashSet集合跟HashSet一样是根据放入的对象的hashCode()方法返回的哈希值来决定元素的存储位置,但是它同时使用链表维护元素的次序。为什么这么做呢?因为这样做可以让放入的元素像是以插入顺序保存的,换句话说,当遍历LinkedHashSet集合的时候,LinkedHashSet将会以元素的放入顺序来依次访问的。所以LinkedHashSet在遍历或者迭代访问全部元素时,性能方面LinkedHashSet比HashSet好,但是插入时性能就比HashSet差些。

3.Map集合:存储的是键值对

Map集合存储的元素是成对出现的,存放的是键值对,键值是唯一的,但是值可以重复,可以理解为超市里面的存储箱,一个钥匙只能打开对应的存储箱,而存储箱里面的东西是可以一样的,这里的键就是钥匙,这里的值就是就是钥匙对应的存储箱里面的东西。键是唯一的,值可以不唯一。Map的键是一个Set集合,只有这样才可以保证键的唯一性,因为Set集合从不放入重复的元素,这就保证了键的唯一性。 
  [1]HashMap 
    底层:数组和链表的结合体(在数据结构称“链表散列“)  
    特点:非线程安全,当你往HashMap中放入键值对的时候,如果你放入的键是自定义的类,那么其该键值对的位置与键对象本身的hashCode()方法返回的哈希值有关。判断重不重复,是通过键对象本身的hashCode()方法和equals()方法决定的,所以当你想把你自定义的类对象通过键来放入HashMap集合,最好重写一下这个自定义类的hashCode()方法和equals()方法。其实Map主要的特点都是通过键来完成的,所以你只要封装好你的自定义类,就可以保证键值的唯一性。 
下面来看看代码,HashMap的增删改查

   //HashMap的操作  HashMap<String,Integer> hashMap = new HashMap<String,Integer>();//HashMap的添加hashMap.put("1", 1);hashMap.put("2", 2);hashMap.put("3", 3);hashMap.put("4", 4);//HashMap的删除hashMap.remove("2");//移除键值为"2"的元素//HashMap的修改hashMap.put("1", 11);//将键值为"1"的元素的键值覆盖为"11",修改其实就覆盖//HashMap的查询,这里需要遍历HashMap//1.通过遍历键的Set集合来遍历整个Map集合System.out.println("foreach遍历");for(String str:hashMap.keySet()){System.out.println(str+":"+hashMap.get(str));}System.out.println("迭代器遍历");Iterator<String> intertor = hashMap.keySet().iterator();while(intertor.hasNext()){String key = intertor.next();System.out.println(key+":"+hashMap.get(key));}//2.使用Map集合的关系遍历System.out.println("Map关系遍历");for(Map.Entry<String, Integer> entry:hashMap.entrySet()){System.out.println(entry.getKey()+":"+entry.getValue());}

[2]TreeMap 
    底层:使用树实现 
    特点:非线程安全,键是TreeSet集合,排序规则是默认使用元素的自然排序,或者根据实现的Comparable接口(比较器)的compareTo()方法进行排序。判断重不重复也是通过compareTo()方法来完成的,当compareTo()方法返回值为0时,两个对象是相同的。所以保证唯一性,只需要让键对应的类实现Comparable接口(比较器),并且实现compareTo()方法。所以存入TreeMap集合作为键的对象对应的类一定要实现Comparable接口。 而跟TreeSet一样,放入后的排序,以及键的唯一性都是通过compareTo()方法完成的。所以如何让自定义的类通过键值放入TreeMap集合,并且保证唯一性,和按照一定规则排序,只需要这个自定义类实现Comparable接口(比较器),实现compareTo()方法即可。例子我就不举了,其实和TreeSet的那个例子基本一样。

[3]HashTable 
    底层:使用哈希表实现的 
    特点:线程安全,基本特点和用法和HashMap相似,性能上稍微差于HashMap,因为HashTable是线程安全的。这个集合我就不详细说明了,基本和HashMap类似,唯一不同的是它是线程安全的。

还有一个集合需要了解一下,LinkedHashMap,这个我想不用我说你也应该知道了,其实和前面说的LinkedHashSet差不多。可以结合前面的LinkedHashSet来分析一下LinkedHashMap,我想这对于你来说不难。

转载于:https://www.cnblogs.com/dhshappycodinglife/p/11047766.html

相关文章:

通过tinyxml解析百度热词榜单

百度热词榜单 初学TinyXml&#xff0c;盯上了解析百度热词榜单。通过curl获取rss地址上的数据。 由于TinyXml不支持&#xff0c;所以要转换为UTF-8格式&#xff0c;命令为 iconv -f gb2312 -t utf-8 baidutop.xml > baidutop.xml 写得很烂&#xff0c;写的时候&#xff0c;心…

台湾MCI报告:Security SaaS风潮渐起

这篇文章是台湾产业情报研究所&#xff08;MCI&#xff09;在2008年所作的一份有关Security-as-a-Serivce&#xff08;Security SaaS&#xff0c;为了区别Software-as-a-Serivce&#xff0c;特称呼为Security SaaS&#xff09;的报告。这里有该文章的繁体版下载。这份报告引用了…

由“公共类”看出的一些东西

如果一个类想要被其他类引用&#xff0c;即使是在同一个命名空间下&#xff0c;也要是public&#xff0c;才能被引用。同样&#xff0c;如果想让别人交流&#xff0c;首先自己应该先要“开放”。转载于:https://www.cnblogs.com/HuShaoyi/p/8503708.html

H-ui 前端框架

H-ui 前端框架 架起设计与后端的桥梁轻量级前端框架&#xff0c;简单免费&#xff0c;兼容性好&#xff0c;服务中国网站。 首个付费版产品 H-ui.admin.Pro&#xff0c;盘他&#xff01;转载于:https://www.cnblogs.com/Jeely/p/11051079.html

使用.NET FileSystemWatcher对象监控磁盘文件目录的改变

原文&#xff08;英文&#xff09;&#xff1a;http://www.techrepublic.com/article/use-the-net-filesystemwatcher-object-to-monitor-directory-changes-in-c/6165137 许多情况下&#xff0c;如果创建或修改一个文件&#xff0c;系统需要执行某些任务。例如&#xff0c;在一…

前端使用crypto.js进行加密学习记录

因为我的需求是加密可逆&#xff0c;具有一定的安全性(对安全性要求不高)&#xff0c;所以使用DES或AES即可&#xff0c;我用的是AES js下载 下载 Nodejs后端&#xff1a;对用户密码进行加密 - WJY- - 博客园Nodejs后端 对用户密码进行加密 使用 bcryptjs 插件对用户密码进行…

Exchange笔记之使用OWA加密访问邮箱

Exchange笔记之使用OWA加密访问邮箱 OWA是什么&#xff1f;呵呵&#xff0c;应该用惯Exchange的用户来说都知道&#xff0c;我在这里简单说下&#xff1a;OWA是一种给予Exchange客户端的一种B/S结构访问方式。OWA是Outlook Web Access的缩写&#xff0c;OWA在我们平时使用的时候…

LInkedHashMap实现最近被使用(LRU)缓存

在最近的面试中&#xff0c;我曾被多次问到&#xff0c;怎么实现一个最近最少使用&#xff08;LRU&#xff09;的缓存。缓存可以通过哈希表来实现&#xff0c;然而为这个缓存增加大小限制会变成另一个有意思的问题。现在我们看一下怎么实现。 最近最少使用缓存的回收 为了实现缓…

2019年9月2日开学!寒假时间也定了……

原文&#xff1a; https://mp.weixin.qq.com/s/Dns-ucDwuDeR7lNSlibyAA 放假通知 今年7月1日放暑假 9月2日开学 今天&#xff0c;省教育厅发布通知&#xff0c;2019年全省中小学幼儿园暑期放假时间统一为7月1日&#xff0c;秋季开学时间9月2日。2020年寒假放假时间为1月18日&am…

Vue 增加动态路由功能 【在原有系统上增加】

目录 遇到问题 1. 修改router/index.js 2. 修改 store文件夹下的 2.1 增加 modules/permission.js 2.2 增加modules/tagsViews.js 2.3 修改modules/user.js 2.4 修改getter.js 2.5 修改index.js 遇到问题 1.当出现循环刷新页面&#xff0c;不断进行请求时&#xff0c;检查配…

读取 android的内存、cpu、流量等 信息

内存总量&#xff1a;/proc/meminfocpu信息&#xff1a;/proc/cpuinfocpu使用率&#xff1a;/proc/stat流量信息&#xff1a;/proc/self/net/dev /proc/net/devetc/network/interfaces 这个文件是保存ip,netmask,gateway信息的&#xff08;包括静态和动态&#xff09;&#xff…

CCNA基础知识汇总

本资源是本人学习的过程中的一些笔记和学习中用到的文档。主要包括ospf&#xff0c;ppp&#xff0c;ACL与策略路由&#xff0c;帧中继&#xff0c;***方面。希望能对大家CCNA的学习有所帮助。下载地址&#xff1a;http://down.51cto.com/data/128047 转载于:https://blog.51cto…

PHP面试内容 整理搜集 PHP面试涉及技术 一文回顾全部 主要含PHP面试命令列表 方法列表...

PHP面试时常涉及的内容总结 熟悉框架 逻辑题 快排 正则 数组函数....抽奖, 秒杀数据库 优化,sql书写缓存 redis mecacheLinux命令其他技术 sphinx, swool 异步处理,(同步异步 分布式)其他语言 Java python(多线程 爬虫) go c(一般温个别的)PHP7新特性 整理制作 https://www.cn…

Python 文件 close() 方法

描述 Python 文件 close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作&#xff0c; 否则会触发 ValueError 错误。 close() 方法允许调用多次。 当 file 对象&#xff0c;被引用到操作另外一个文件时&#xff0c;Python 会自动关闭之前的 file 对象。 使用…

校园音乐点歌平台的设计与开发 微信小程序 推荐点歌 java 开发

1、 微信小程序前台展示 &#xff08;基于协同过滤算法 根据用户点歌行为 对用户点歌进行推荐&#xff09; 2 、 使用到的技术框架 Springbootmavenmybatis网易云相关API 3、 后台展示 项目地址&#xff1a; 项目地址

Code Reading -chap4

Chapter4: C Data Structures 67. Read explicit data structure operations in terms of the underlying abstract data class.(P96) 依据显式数据结构背后的抽象数据类去阅读该显式数据结构操作。 &#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xf…

在Red Hat Linux5下构建LAMP网站服务平台之MySQL、PHP的安装与配置

在Red Hat Linux5下构建LAMP网站服务平台之MySQL、PHP的安装与配置 2010-09-09 16:40:49标签&#xff1a;PHP Linux mysql RedHat    [推送到技术圈] 版权声明&#xff1a;原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和…

移动端iPhone系列适配问题的一些坑

完成移动端的开发项目之后&#xff0c;发现谷歌自带的调试器似乎没有什么太大的作用&#xff0c;整天借同事的苹果手机测bug,尽管同事不厌其烦&#xff0c;但还是觉得这iPhone系列适配问题适配到想逃逃逃&#xff0c;好在项目已经顺利完成&#xff0c;测试通过&#xff0c;下面…

shred命令

不做陈冠希必备。。。。 shred --help 用法&#xff1a;shred [选项]... 文件... Overwrite the specified FILE(s) repeatedly, in order to make it harder for even very expensive hardware probing to recover the data.Mandatory arguments to long options are mandator…

WPF初探--RichTextBox

1. 设置RichTextBox运行换行 将AcceptReturn属性设置为true 2. 保存RichTextBox内容到文件 //path为完整保存路径名 private void SaveRtfFile(string path) { FileStream fs new FileStream(path, FileMode.Create); TextRange range; range new TextRange(your…

手把手视频第一节

个人的总结&#xff1a; 今天又重新开始看一套单片机视频&#xff0c;算上这一套已经是第三套了&#xff0c;也总结了一些教训。首先是在抄代码的时候不明白的地方就算后来明白了也要加注释&#xff0c;解释这句话的意思&#xff0c;否则以后看的时候一定是一脸懵逼。 手把手第…

异步操作(三)

APM的轮询聚焦技巧 就从字面意思来理解&#xff0c;每隔一段时间来查询&#xff0c;异步操作的结果。而怎么实现轮询的方法了&#xff0c;这里就要谈到IAsyncResult接口。它定义了若干个只读属性 publicinterfaceIAsyncResult{ Object AsyncState {get;} WaitHandle AsyncWaitH…

Django-C002-深入模型,到底有多深

此文章完成度【100%】留着以后忘记的回顾。多写多练多思考&#xff0c;我会努力写出有意思的demo&#xff0c;如果知识点有错误、误导&#xff0c;欢迎大家在评论处写下你的感想或者纠错。 ORM介绍&#xff1a;对象关系映射&#xff08;英语&#xff1a;(Object Relational Map…

Linux中断流程分析

裸机中断&#xff1a; 1、中断流入口 2、事先注册中断处理程序 3、根据中断源编号&#xff0c;调取处理程序 irq_svc&#xff1a;1、等到产生中断源的编号&#xff08;每一个中断号都有一个描述结构&#xff09; 2、转载于:https://www.cnblogs.com/sanshijvshi/p/8531025.html…

手把手视频第二节

一、单片机的三大内部资源&#xff08;我们作为用户&#xff0c;单片机可以提供给我们的资源&#xff09; 1、FALSH&#xff08;程序存储空间&#xff09; &#xff08;1&#xff09;早期使用的一般是TOPROM &#xff0c;程序只能写入一次&#xff0c;程序写错了只能换一块。 &…

SQL Server DATEADD() 函数

定义和用法 DATEADD() 函数在日期中添加或减去指定的时间间隔。 语法 DATEADD(datepart,number,date) date 参数是合法的日期表达式。number 是您希望添加的间隔数&#xff1b;对于未来的时间&#xff0c;此数是正数&#xff0c;对于过去的时间&#xff0c;此数是负数。 datepa…

致广大关注《网络规划设计师考试案例梳理、真题透解与强化训练》读者朋友的一封信...

致广大关注《网络规划设计师考试案例梳理、真题透解与强化训练》读者朋友的一封信 书是人类进步的阶梯&#xff0c;读书是增强个人软实力的佳径。好读书是你的美德&#xff0c;读好书是你的选择&#xff0c;书好读是我们的承诺&#xff01;如果有心&#xff0c;不妨把一卷《网络…

Mac MySQL 数据库配置(关系型数据库管理系统)

本文已停止更新&#xff0c;点击此链接查看本文最新内容 &#xff01;&#xff01;&#xff01;前言 MySQL 关系型数据库管理系统。1、配置准备工作 1&#xff09;配置数据库准备工作 下载相关软件 mysql-5.7.21-1-macos10.13-x86_64.dmgmysql-workbench-community-6.3.10-maco…

SSM框架——Spring+SpringMVC+Mybatis的搭建教程

一&#xff1a;概述SSM框架在项目开发中经常使用到&#xff0c;相比于SSH框架&#xff0c;它在仅几年的开发中运用的更加广泛。 Spring作为一个轻量级的框架&#xff0c;有很多的拓展功能&#xff0c;最主要的我们一般项目使用的就是IOC和AOP。SpringMVC是Spring实现的一个Web层…

【java】兴唐课程第五节到第九节知识点总结

第九节 1、 代码&#xff1a;void readBook(String… bookNames) 表示不确定参数的个数&#xff0c;此时变量为一个数组。 2、当方法中的参数名称(如stuname)和属性名称相同时。 this.stuname表示属性 stuname表示参数。 3、主方法与所在的累无关&#xff0c;是一个程序的入口…