/*

 * Collection主要的连个儿子:

 * |--List

 * 有序(存储顺序和取出顺序一致),可重复

 * |--Set

 * 无序(存储顺序和取出顺序不一致),唯一

 * 

 * HashSet implements Set:它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。(这次测的这样,下次就不一定这样)

 * 注意:虽然Set集合的元素无序,但是,作为集合来说,它肯定有它自己的存储顺序,

 * 而你的顺序恰好和它的存储顺序一致,这代表不了有序,你可以多存储一些数据,就能看到效果。

*/

以简单的代码来看看什么效果。

import java.util.HashSet;
import java.util.Set; public class SetDemo {
public static void main(String[] args) {
// 创建集合对象
Set<String> set = new HashSet<String>(); // 创建并添加元素
set.add("hello");
set.add("java");
set.add("world");
set.add("jav");
set.add("world"); // 增强for
for (String s : set) {
System.out.println(s);
}
}
}

输出结果:

hello

jav

java

world

可见存取与取出顺序是不一样的。无序里面其实带着有序。对于原因,要看源码后理解。接下来先笼统介绍一下原因。因为底层实际上时hashmap(这是另一种集合,后边会写到)

原因:这个方法底层依赖 两个方法:hashCode()和equals()。

步骤:

 * 首先比较哈希值

 * 如果相同,继续走,比较地址值或者走equals()

 * 如果不同,就直接添加到集合中

 * 按照方法的步骤来说:

 * 先看hashCode()值是否相同

 * 相同:继续走equals()方法

 * 返回true:
说明元素重复,就不添加

 * 返回false:说明元素不重复,就添加到集合

 * 不同:就直接把元素添加到集合

下一节介绍hashset的add方法存取有序和无序的概念,以及存储自定义对象注意事项。

最新文章

  1. JAVA 笔试笔记
  2. PHP图片裁剪类
  3. 排序(qsort sort的使用)
  4. mysql-关于Unix时间戳(unix_timestamp)
  5. js的严谨模式
  6. Yii1 控制前端载入文件
  7. Android蓝牙传感应用
  8. Windows IOT
  9. Mysql常用表管理语句
  10. Python 面向对象(一) 基础
  11. 关于ORACLE的各种操作~持续汇总~
  12. MySQL 基本语句(2)
  13. CF1106F Lunar New Year and a Recursive Sequence 原根、矩阵快速幂、BSGS
  14. 20165313 《Java程序设计》第八周学习总结
  15. php的自动加载函数spl_autoload_register和__autoload
  16. 项目版本不同导致Eclipse报错问题——关于在JDK1.7环境中,运行JDK1.8环境下编写的项目
  17. PHP开发必用的mysql那么你知道Mysql中MyISAM和InnoDB的区别吗?
  18. select标签中option内容加链接
  19. ConEmu
  20. Eclipse+APKTool动态调试APK

热门文章

  1. SQL Server数据库账号密码变更后导致vCenter Server无法访问数据库
  2. Mysql锁机制--并发事务带来的更新丢失问题
  3. Flexible DEMO 实现手淘H5页面的终端适配
  4. 关于ubuntu14.04LTS 64位 播放优酷视频
  5. 创建OpenGL Context(WGL)
  6. delphi 面向对象实用技能教学一(递归)
  7. dokcer自动化构建部署java web 基于jenkins+maven+nuxus容器
  8. Android Design Support Library使用详解——Snackbar
  9. MyBatis批量新增和更新
  10. JVM类加载原理学习笔记