学习数据结构的第六天(包括一些还没学习的,指导之后学习的要点)

Posted startfrom0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习数据结构的第六天(包括一些还没学习的,指导之后学习的要点)相关的知识,希望对你有一定的参考价值。

现在看一下,set和map的作用,以及treeset的作用。

技术图片

对于以后还需要学哪些:

 

对于相应的时间复杂度的分析、对于排序的相应内容,都是需要再看的。

什么最好、最坏之类的。

自写数据结构对于leetcode相应代码的实现也要学,在哪些部分去写private class 在哪些部分去写private interface,都要学。

对于之前学过的计算机网络、操作系统等知识,需要先复习已经学过的了。然后的话再去根据面试添加内容。

 

set和map的相应内容:

如果说自己去写相应的实现,

        Set<String> set = new HashSet<>();

        Set<String> set = new TreeSet<>();

        Map<String, Student> map = new HashMap<>();

        Map<String, Integer> map = new TreeMap<>();

这里说的是: 如果说自己去写,那么应该使用什么,应该使用:  HashSet ----》   不需要排序的set

treeset---需要排序的set。    hashMap---不用排序的map ,treemap---需要排序的map。

 

然后的话知道:什么时候应该使用set :希望放到里面的元素无重复时,应该使用set

什么时候应该使用map:希望建立的是:一对一的映射时,那么就使用map。

那么pair和map的区别,自己也知道,使用pair是更加轻量级的。

 

通过key计算索引的方式就是调用key对象的hashCode()方法,它返回一个int整数。HashMap正是通过这个方法直接定位key对应的value的索引,继而直接返回value

因此,正确使用Map必须保证:

  1. 作为key的对象必须正确覆写equals()方法,相等的两个key实例调用equals()必须返回true

  2. 作为key的对象还必须正确覆写hashCode()方法,且hashCode()方法要严格遵循以下规范:

  • 如果两个对象相等,则两个对象的hashCode()必须相等;
  • 如果两个对象不相等,则两个对象的hashCode()尽量不要相等。

这里说的是:放入,使用map的时候的注意点是什么:

如果说使用到了任何一个容器去查找某个元素(search、contains)的功能,那么需要这个类的对象实现equals函数。

原因:它们是否相等,需要去定义这个内容。对于基本的数据类型,引用的string类型,它们都是已经写好了这部分内容在里面的。

 

 

  1. 作为key的对象还必须正确覆写hashCode()方法,且hashCode()方法要严格遵循以下规范:

  • 如果两个对象相等,则两个对象的hashCode()必须相等;
  • 如果两个对象不相等,则两个对象的hashCode()尽量不要相等。

hashCode函数的作用:根据对象,得到它们的哈希码。  那么list查找

我们把不同的key具有相同的hashCode()的情况称之为哈希冲突。在冲突的时候,一种最简单的解决办法是用List存储hashCode()相同的key-value。显然,如果冲突的概率越大,这个List就越长

这里说的是:为什么map需要覆写hashcode函数,因为map是根据对象,找到hashcode值,再去找到指定的对象的。

即:如果需要查找某些东西,那么要写equals,如果说map,除了这个之外,如果你是作为key的,那么还要去覆写hashcode函数。

 

那么如果自己去写实现的话:

那么linkedlist可以作为map,作为set的实现。

bst可以作为map,作为set的实现,那么它里面的set东西是排序过的,map的key也是排序过的。(因为二叉搜索树里面的添加就是按照顺序来添加的)

 

BSTMap<K extends Comparable<K>, V> implements Map<K, V>

这句话是非常好的,因为:如果说里面持有的元素是需要去比较的,所以说第一个元素需要去extends comparable的类。

而它们整体,是作为map的实现。

 

技术图片

 

 技术图片

 

 

如果说分成四个文件的结构,那么

1底层容器

2.如何用底层容器是实现的接口,记住,这个位置是持有底层容器的位置,如上面的第二个图。

3.接口:只写抽象的函数

 

这里是教如何去自己写接口、写如何实现接口等。

 

以下是双文件结构:

技术图片

 

 其实main函数还没写,相当于三文件结构来的。

技术图片

 

 把node作为私有的类进行存储

技术图片

 

 把相应的函数都给直接放进来,把相应的linkedlist的函数都直接进行合并进来。

就是把:底层容器的持有,这部分内容改了。不持有底层容器,直接写底层容器是如何实现的。

 

 

以下是单文件结构,常用于:leetcode代码之类的。

但是也注意:leetcode的代码,一般都是直接写现有的实现吧,都是已经有现有的实现了,直接去调用就行了。

 

技术图片

1.把interface也变成是private的持有

2.把相应的实现接口的,也变成是private的持有类。

3.当然,也是把底层容器,给融合到了这个  实现接口的  东西里面去。

 

这里说的是单文件结构的做法

 这一节先到这,然后去把相应的给做了之后再继续分析。

以上是关于学习数据结构的第六天(包括一些还没学习的,指导之后学习的要点)的主要内容,如果未能解决你的问题,请参考以下文章

Python的第六天

学习java的第六天

python 学习的第六天 数据的预处理

python学习的第六天数据类型及内置方法part2

学习的第六天

Python 3 学习的第六天——文件操作