A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 厦门校区   /  2018-12-22 18:45  /  3103 人查看  /  36 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.List接口下都有哪些集合,他们各自有什么特点
答:1.ArrayList,特点:有序,有索引,可重复,底层是用数组实现的,所以具有索引,并且由于底层是数组结构,           有索引所以具有查询快的特点,遍历集合的话可以用迭代器,也可以用普通for循环
      2.LinkedList集合,特点:查询慢,增删快,可重复,有索引,底层使用的链表形式,前一个数据记住后一个数据的地址值,第二个数据记住第三个数据的地址          值,以此形成一个链条的形式,若需要增删元素的话只需要断掉之前的地址值,把前一个元素的地址值赋值给新加的地址值新加的元素地址值记住后面数据的            地址 值就好了,若查询的话因为没有索引,需要重头开始挨个比较所以慢。
, 3.Vector集合:比较古老的集合,在jdk1.0就有了,目前已经被ArrayList取代,基本不用了2.Set接口下的集合是如何保证无序不可重复的
       答:1.因为Set接口下的集合添加元素的时候都会给元素生成一个哈希值,添加的时候底层代码会自动比较哈希值是否一致,若哈希值一致还会调用equlas方                     法,比较内容,若内容也一致则会返回false元素将添加不进去,反之则可以添加进去,若存储自定义应用类型,需要重写hashCode和equals方法。

3.我们为什么要重写HashCode( )和equals()方法?
     答:1.重写HashCode( )和equals()方法主要是作用是为了去重。
4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
答:1.数据存放进Set集合的时候先会生成一个哈希值,会先调用哈希值来比较集合中是否有相似的哈希值,若有相似的才会调用equals比较内容,因为有存在哈希值一样但是内容不一样的情况, 先执行HashCode( )比较哈希值的原因是,如果哈希值都不一样了那数据肯定不一样,直接可以添加进集合,所以不用再次调用equals比较了,节省性能, 貌似百度云的秒传功能就是用的类似的方法,我个人理解在百度云数据库里面我们每次上传的一些资源都会由百度的高深算法自动生成一段类似/或者干脆就是哈希值或者MD5值的一段数字,然后后期又有人上传的时候,在上传那一刻百度就会拿到这个文件的名称和这个文件的体积还有文件的一些其他信息根据相同的算法,生成一段哈希值最后(先)把这段哈希值传回了百度云的数据库,依托百度的强大算法(先)用这个值去比较当前数据库中是否存在相同的值,若存在相同的值则立即把找到的数据库A用户的数据地址值复制一份给B用户存到B的用户的账户中随后返回一个字符串提示B用户(文件秒传成功)其实文件本身根本就没有传输只是传输了一个值上去,以此来达到秒传,若由此推断百度云的数据库里面没有重复数据,用户都是保存的文件的地址值,上传相同的文件会直接复制地址值就好了。(自己试验过更改了文件的MD5值和哈希值后上传就不会秒传,不更改第二次上传则秒传)。
5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,一般我们使用Comparator较多,因为实现Comparable接口的方式比实现Comparator接口的耦合性 要强一些


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马