00:01
好了同学们,那咱们就接下来继续吧,那上节课呢,我们最主要是把我们collection这一块的一个。一个继承结构,咱们看了一下是不是,哎,继承结构看了一下啊,但是这里列出来的这些东西呢,有大家可能现在还听不懂的是不是。比如说我们这个吹塞底层是一个什么呀?吹map,吹map它是一个什么呀?叫做二叉数,哈西塞的底层是一个哈希map,哈希map底层一个什么呀?是一个哈希表是不是什么是哈希表,什么函数,包括什么是链表,对不对,这个大大大家都还不知道,没关系啊,我说了讲到这的时候咱们再去看啊。现在先把这个集成结构先看一下,嗯,我希望大家下去之后背会吧,这两天你最主要的任务是把这个图背会,就是死记硬背啊,但是你背的过程当中一定要记住了哪些是接口。哪些是类,你要背清楚。你比如说哪个是接口对吧?哎,哪个是类这个东西呢,你不要把saled set啊,把它当做是一个是一个是一个类了,它是一个接口啊,哎,然后下面吹ET它才是一个什么。
01:02
来实现类啊实现类,那么这个sorted set呢,首先这块我还没有给大家说它的,它这个存储元素的特点是什么。啊,它这个存储元素特点是什么啊,来说一下TED site啊,这个集合存储元素的特点是什么呢?是同样啊由于继承了什么呀,S集合。所以它的特点也是什么呀,无序不可重复啊,但是放在什么呀,放在这个sal set集合中的元素可以自动。排序。啊,我们称为有趣的集合,我们称为。我们称为可排序集合。
02:00
啊,就是放到这个集合里边的元素啊,它的特点是从小到大,或者从大到小排序的。啊,放到放到该集合中的元素是自动按照什么呀大小顺序排序的,那它的排序规则是怎么排的,它的实现原理是什么?到时候我们还是那句话,讲到这儿的时候我们再看再说啊,但它一定是无序不可重复的,各位啊,就是没有下标。没有下标也不能重复啊,但是呢,放到这个集合里边是从小到大排序的,这个不排序啊,这是不排序的。啊,然后呢,这个呢是有序可重复,就是这个集合里面元素是有下标的,从零开始啊,012345678对吧?哎,是这样一个情况啊好了,那么接下来呢,这个单个方式呢,我们就说到这儿,那么在我们Java源中还有一个集合对吧?这个集合是什么呢?是我们这个成对的方式啊,大家往这儿看有没有一个接口叫做map接口。
03:03
这个map接口呢,大家看啊,它的所有已知的子接口,所有已知的实现类,这里面是不是没有负接口啊。你看这里面没有没有什么负接口,只有这么一个接口,好,这说明map集合是不是和我们这个collection是没有关系啊。对吧,它是没有关系的啊,所以在这是一个独立的单独的一个继承体系啊,这是一个map。各位啊,这是一个map。哎,那么这个map呢,它呀。那集合。第一点啊,和这个collection没关系,没有关系啊,这是第一点,第2.map集合以什么呀,以K和Y6的这种键值对的方式存储元素啊,第3.k和VALUE6都可以都是啊都是吧,存储Java对象的什么内存地址啊内存地址。
04:09
以键值对的方式存啊,这就是map。这是个接口,各位啊,点右键format,然后这块的话把这个display啊改成它。那就改成这种格式吧。啊,上面标着interface是个接口嘛,是不是,那么这个接口下有哪些实现类呢?所有已知的实现类,其中有个哈希map,有个吹map是不是,你看哈希map你看。是不是还有个哈希table对不对,哎,那么我们把这哈希map哈希table这这块我们说一下啊,来,它有实现类,这个实现类的话,你点开这个class啊,这一块的话,嗯,有一个叫什么叫做哈希map。啊,还有一个实现类叫做哈希table t是小写,各位啊哈西table是小写,你看。T小写,然后呢?
05:00
我们。这块啊,是一个实现类。这个实现类呢,去继承谁啊,哎啊,错了。应该是实线,虚线空气箭头指向负。啊,虚线啊这样的。这是时间关系吗?对对,实现关系啊,这是接口,这是实现类实现类。这个呢,用的比较少了。啊,这个用的比较少了。因为啊这个。它是线程安全的,里边的方法都带有什么呀,Synchronized。这个是非线程安全的啊。对,这个是非限制安全的。那么我们现在保证现场安全有别的方式了?啊,你这个实现类里边的方法。都带效率比较低一些,现在使用这个比较多。啊,就跟这个关系是一样的。这个和这个底层都是什么呀?哎,数组,但是这个是线程安全的,这是非限制安全的啊回来这。
06:03
我来解释一下啊,解释一下,嗯,这边呢,给大家写一下注释。就是哈希map。哈希map集合底层是哈希表。数据结构。啊,数据结构。是非什么呀,线程安全的。那呢?哈希table底层这个集合啊,底层也是哈希表。术语结构。是县城什么呀,安全的。啊,其中所有的方法都带有什么呀?Synchronized的关键字效率较低,现在使用较少了。
07:01
因为控制线程安全,有其他更好的什么方案?那有其他更好的方案?这是说的这个哈希table各位。这个是说的哈希map。啊,那么。我们除了这两个实现类之外,实际上map这个接口啊。它还有一个子接口,各位。这个子接口,我们找找所有已知的子接口,有个叫map的接口。它都是以键值对的方式存储各位啊。来这是个接口,各位啊,变了它是个接口啊。这个接口点右键,我们在这儿format一下,把这个显示方式采用这种方式啊。来。接口和接口之间属于继承,继承是实现空心箭头指向负它。啊,然后这个map。
08:06
它下边有什么实现类呢,我们可以看一下啊,它下边所有已知的这个实现类啊,有一个叫map,你看。这是个类,各位不是接口的。我们把这个图画出来啊,就在这儿。这个类呢去实现这个接口,所以是虚线的空心箭头指向负这样。啊,然后哈希table下边还有谁呢?哈,Table下有一个东西我给大家补一下啊,在这哈希table这个类下有一个所有已知的实现类子类啊,所有已知的子类,哈希table现在所有的子类有个类叫properties,这个可能用得上。Properties are?我先画上去,各位。Properties这个类继承了这个类,这个类是谁呢?是一个属性类。
09:00
继承的话是实现的,空心轴指向负。是这样一个关系。啊,这样一个关系各位。好了,他们都是以键值,对啊,K value key value它是接口,它是接口实现类实现类实现类实现类都是实现类啊。来这块我想补上一点,各位啊。注意所有map集合的K,所有map集合的K。特点是无需不可什么重复的。第四点我先补上这儿啊,所有map集合,就是不管是哪个map集合,它的K,它的特点都是无去不可重复的。Map集合的K和set集合存储元素的特点一样,对吧?Map集合和site map集合的K吧和set。集合存储元素特点相同。
10:03
那么这也就是说,为什么说我们这一块在往site集合里边放的时候,实际上是放到map集合里边的。其实我们也可以看一下这个源代码,哈希set集合,往里边存元素的时候,实际上哈希map底层不是创建了哈希map吗?对吧,往set集合里边放,它是放到map哪了呢?我们可以打开源代码看一下。我们找找这个,这已经有了是吧?还said啊,这不还塞吗?然后CTRL f12找一找,这个里边I的方法是往里边加元素,你看这个加元素它底层实际上是调map集合的pull的方法,K和value,大家看是不是把元素加到这个set集合里边,实际上是把元素放到了这个map集合的K部分。这个put就是往map里边加,你往set里边加元素,就实际上是把这个元素加到了map集合的部分。
11:02
实际上是这样的。所以我们在这个地方的这个什么哈西set呀,Tree set呀,对应的就是我们这里的什么呀,哎,我们的一个哈西map呀,哎,Tree map,你往这个集合里边放键之对,你往这个里边放键之队,其实这个map集合的键就是我们set集合。K吗?啊,就是集合啊,都是啊。来,那么这个map它存储元素的特点是什么呀?这边先写上这个吧。嗯。写到这儿就行了啊,所有map集合K的特点无序,不可重复,Map集的K和S集合存储元素特点相同。往这儿看。这个集合有它自己的特点。Map集合的K存储元素的特点是什么?
12:07
首先是无序,什么不可重复的?啊,另外放在什么呀?Sorted map集合K部分的元素会自动按照大小顺序排序。啊,称为可排序的集合。啊,然后这个底层是哈希表,这个底层是哈希表,那这个其实底层也是哈希表,这个底层是一个什么呀?Tree map这个吹是一个什么呀,是一个。二塔树。啊吹map集合底层存储元素的时候,或者底层的数据结构是一个二叉树。
13:01
啊,是二。然后呢,这个properties呢,它有一个要求什么,要求它的cake value必须是string类型。注意啊。Properties是线程安全的,因为继承谁啊,继承这个哈希table。明白吗?另外存储到另外这个properties啊。存储元素的时候也是采用什么呀,K和Y的形式存储。并且K和value只支持string类型。不支持其他类型。这个特点呢,大家也要注意,因为后期我们这个类会用到。啊,我们这个类被称为属性类啊,Properties被称为什么呀,属性类啊,以后在开发中我们会用到它,所以在这里我在图上就给大家体现出来啊,体现出来行了,这个呢,就是关于我们map集合它的一个特点,各位。
14:17
就list有排序吗?哎哟。乱了吧?A release不能排序,A release集合我们叫有序,有序和排序不一样。这个list是。有序,可重复。有序可重复这里所说的这个有序指的是什么?我再强调一下啊,这里所说的这个有序啊,指的是存进去的顺序跟取出的顺序不乱,存的时候是这样存的,取的时候还是这样取的,这叫有序。啊,这叫有趣。那么这个side是无序不可重复的。就是它没有下标,它存进去和取出的元素的顺序啊就不一样了。
15:04
你存进去是这个顺序,取出来就不一定是这个顺序了,另外元素也没有下标。但是集合它的特点是什么呀。它也是无序不可重复啊,因为它是继承set的,Set是无序不可重复,所以也是无序不可重复。但是。它存进去的元素,它是会按照大小顺序排序的,排序明白吗?哎,包括我们刚才所说的这个吹麦集合,它也是什么呀,无序K啊,K部分是无序不可重复的。另外K部分元素它是可以自动按照大小顺序排序的啊排序的。啊,你要知道这个东西啊,别混别混乱了啊,别混乱了,来把这个呢,咱们复制一下这样。这个我再复制一份啊。我放到哪呢,这个课堂笔记里边。这有一个word文件。
16:00
我删了。贴过来啊,然后往下呢,我再来一个map。Ctrl a全选,CTRLC复制,CTRLV粘贴。贴过来。注意看啊,大家呢,把这个图呢要背会。把把这两个图背会啊。Map和collection没有继承关系啊,Map是以键值对的方式存储元素。我在这总结一下吧,总结一下啊a list link list。还有一个是什么呀?叫哈西什么set,还有叫什么tree set吧,是不是还有叫什么呀,叫哈西什么map吧,还有叫什么哈西什么table吧,还有叫什么pro吧,哎,还有什么呀,叫做tree。Map。总结,这是所有的实现类。
17:02
所有的时间类啊,总结一下,第1RELEASE底层是数组。对不对,哎,底层是数组。然后这个底层呢是什么。是双向链表对不对?这个底层是什么呀?数组线程安全的效率较低,使用较少。哈希呢?底层是什么呀?哈希map吧。是不哈。哎,放到哈set集合中的元素等同于放到哪呢?哈希map集合K部分了。啊,部分。那这个tree set呢?底层是什么呀?吹map吧,放到什么呀?
18:02
S集合中的元素等同于。放到吹。Map集合K部分了。啊,K部分了,然后这个哈希map底层是什么呀?底层是哈希表吧。哈,西表啊。数据结构。啊,这个底层也是哈希表。啊,只不过线程安全的效率较低,使用较少了啊,然后这个properties呢,是线程安全的,并且和value只能存储。只能存储字符串string啊,吹map集合呢?
19:03
底层是二叉树数据结构啊。吹map集合的K可以自动按照什么大小顺序排序。法排序。来这是这块啊。哎,你看看这个。底层是数组。Link list呢,底层是双链表。双向链表啊,Y的底层是数组。哈西赛的底层是哈map,吹赛底层是tree map。哈希map层是哈希表哈,Table底层也是哈希表是吧?Prop检差安全的K和Y6是string tree map底层是二叉树。
20:00
List集合存list集合存储元素的特点。啊塞集合存储元素的特点。Set集合存储元素特点。我们在这再总结一下这几个特点,各位啊,特点,那么这个类似存储元素的特点是什么呢?是有序可重复。有序是什么意思?可重复是什么意思?有序是指存进去的顺序和取出的顺序相同,每一个元素都有下标,明白吗?可重复是存进去一可以再存储一个一没问题啊,没问题。好,这就是我们的例子的集合,那set集合呢,是无序啊,不可重复,那么这个无序是什么?这个不可重复是什么?这个无序珠说的是呀,是存进去的顺序。
21:09
啊,和取出的顺序不一定相同。另外。S集合中元素没有下标啊,不可重复存进去,一不能再存一个,一不能再存储一了,就这个意思啊,那sorted side首先首先它是什么呀?首先是无序不可重复的。啊,它它负接口是它呀,所以它是无需不重,它也是无需不可重复啊,哎,但是啊,Saled set集合中的元素是可排序的。啊,是可排序的,明白什么意思吧,是可排序的。啊,无序不可重复,就是还是这个意思啊。
22:03
啊,那可排序是什么意思?是可以按照大小顺序排列。啊排列,那你这个实际上sorted set对应的其实就是谁呀,就是那个sal map呀。对吧,哎,那你这个set对应的是谁呀。不就是卖吗?你永远要记住啊,Map集合的K。就是一个set集合。往map集合往什么呀?往set集合中放数据,实际上。放到了map集合的K部分。
23:00
因为刚才呢,这个源代码我也让你看了是吧?哈,Set里边是不是有艾的方法,你看往哈set ADD实际上是往木map里边put k和value这个K你看见了吗。哎,是不是它放到K部分啊。是不是哎,放到K部分啊。爱的吗?往set集合里边放数据,数据放到map集合的部分了。这个map。调map,你看是不是哈啊哈西map吧,哎,Map是个哈西map你看是吧,这个啊是哈map。啊,调铺的方法。就放进去了啊放进去了。好了,那这样的话,咱们呢,就把这两个图哎给大家画完了,各位啊,画完了下去之后呢,还是得背呀,你呢就照着我这个word文件文档去记吧。啊,到word文档去记啊,你要愿意画这个图呢,你可以用一下这个star u ML这个工具,呃,用一下用一下就熟悉了啊,用一下就熟悉了。
24:08
那当然这个图上咱们也说了很多,比如像这虚线的空间头指向指向负,就属于什么实线关系是不是啊,如果是实线的空间的向符叫什么泛化关系,如果是实线箭头的话就表示什么呀?关联关系吧,哎,关联关系啊。这里边儿哪些是接口,你能不能记住,哪些是实现类,你能不能记住哪些是接口对吧,哪些是实现类,每一个集合底层的数据结构你能不能。记住对吧,这个是。你通过单词啊,看array是什么意思,数组link的链表是不是哈希,哈希表是不是tree,二叉树数嘛,二叉树对不对,通过这个类的名字,其实你也基本上能猜出来它是什么样的一个数据结构。啊,Tree,你看二尔大树吧,哎,哈希不是哈希表啊,哈希是不是哈西表啊?哎,哈西表啊。
25:00
行吧,那咱们今天上午的话就先到这儿啊,就把这个集合的一个继承结构呢啊给大家讲了讲,下午的时候咱们就一个一个开始看了啊,比如说我们先看这个老祖宗collection,先看单个的是吧,等我们单个的学完之后呢,我们再看什么呀,这种建值对的这种方式,每一个集合我们都用一用,每个集合底层数据结构我们都讲一讲,那将来在开发项目的时候呢,我们干什么呀?哎,在合适的时间去选,选择合适的集合去使用啊,这个地方应该选择这个这个这个这个。呃,竹筐对吧,还是塑料袋对吧?哎,我们是选择什么样的容器去存储这个数据啊,主要是这样的,大家压力不要太大啊,说这个东西底层数据结构必须得精通,没必要。没必要,你会用就行,就比如说这个集合这块往里边加数据,你怎么加对吧,我集合里边元素怎么变利,一个一个怎么变利,我这个集合里边怎么添加元素,我这个集合里边元素怎么便利一个一个怎么拿出来,就最主要你想集合这块最主要掌握的是啥,是不是就是你怎么往里边放东西,怎么从里边取东西,对吧。
26:04
啊,因为它毕竟是个容器嘛。对不对,哎,你在超市里边购物袋装了十个苹果,回去之后你再把十个苹果拿出来呀。是不是,难道你要在塑料袋装着吗?装着没有意义啊,就是存取的一个操作比较重要,比较重要。行吧,大家可以吃饭去了啊,吃饭去了。
我来说两句