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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

成成1990

初级黑马

  • 黑马币:42

  • 帖子:9

  • 精华:0

© 成成1990 初级黑马   /  2016-9-13 09:04  /  496 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

HashSet原理:
  
* 如果我们希望一个集合有去重复的功能, 可以在它的add方法中检查要添加的对象在集合中是否存在.
* 迭代集合中每个元素, 和要添加的比较, 如果相同, 就不存.
*
* 如果使用上述方法, 当集合元素特别多的时候, 效率会很低.
*例如: 集合中有1万个元素, 当存储下一个的时候, 需要和前面1万个都比较, 效率较低.
*
* HashSet的工作原理:
*   每次存储对象的时候, 调用对象的hashCode()方法, 计算一个哈希值. 在集合中查找是否包含哈希值相同的元素.
*    如果没有哈希值相同元素, 直接存入.
*    如果有哈希值相同的元素, 逐个使用equals()方法比较.
*     比较结果全为false就存入.
*     如果比较结果有true则不存.
*
* 如何将自定义类对象存入HashSet进行去重复
*   类中必须重写hashCode()方法和equals()方法
*   equals()方法中比较所有属性
*   hashCode()方法要保证属性相同的对象返回值相同, 属性不同的对象尽量不同

   TreeSet原理:
   
* TreeSet存储对象的时候, 可以排序, 但是需要指定排序的算法
*
* Integer能排序(有默认顺序), String能排序(有默认顺序), 自定义的类存储的时候出现异常(没有顺序)
*
* 如果想把自定义类的对象存入TreeSet进行排序, 那么必须实现Comparable接口
*   在类上implement Comparable
*   重写compareTo()方法
*   在方法内定义比较算法, 根据大小关系, 返回正数负数或零
*   在使用TreeSet存储对象的时候, add()方法内部就会自动调用compareTo()方法进行比较, 根据比较结果使用二叉树形式进行存储

2 个回复

倒序浏览
给满分~~
回复 使用道具 举报
{:2_30:}怎么这么像复制的.....
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马