这篇文章主要介绍了通过实例学习Java集合框架HashSet,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
<强>示例1:元素不能重复强>
中设置的元素,不能重复
包集合; 进口java.util.HashSet; 公开课TestCollection { 公共静态void main (String [] args) { HashSet名称=new HashSet (); names.add (“gareen”); System.out.println(名称);//第二次插入同样的数据,是插不进去的,容器中只会保留一个 names.add (“gareen”); System.out.println(名称); } }
<强>示例2:没有顺序强>
中设置的元素,没有顺序。
严格的说,是没有按照元素的插入顺序排列
HashSet的具体顺序,既不是按照插入顺序,也不是按照hashcode的顺序。
以下是HashSet源代码中的部分注释
/* * *没有担保的迭代顺序设置; *特别是,它并不保证订单将随时间保持不变。 */
不保证组的迭代顺序;确切的说,在不同条件下,元素的顺序都有可能不一样
换句话说,同样是插入0 - 9到HashSet中,在JVM的不同版本中,看到的顺序都是不一样的,所以在开发的时候,不能依赖于某种臆测的顺序,这个顺序本身是不稳定的
包集合; 进口java.util.HashSet; 公开课TestCollection { 公共静态void main (String [] args) { HashSet数量=new HashSet (); numbers.add (9); numbers.add (5); numbers.add (1);//设置中的元素排列,不是按照插入顺序 System.out.println(数字); } }
<强>示例3:遍历强>
设置不提供get()来获取指定位置的元素
所以遍历需要用到迭代器,或者增强型的循环
包集合; 进口java.util.HashSet; 进口java.util.Iterator; 公开课TestCollection { 公共静态void main (String [] args) { HashSet数量=new HashSet (); for (int i=0;我& lt;20;我+ +){ numbers.add(我); }//设置不提供得到方法来获取指定位置的元素//numbers.get (0)//遍历集合可以采用迭代器迭代器 (Iterator 迭代器=numbers.iterator ();iterator.hasNext ();) { 整数i=(整数)iterator.next (); System.out.println(我); }//或者采用增强型的循环 (整数我:数字){ System.out.println(我); } } }
<强>示例4:HashSet和HashMap的关系强>
通过观察HashSet的源代码,
可以发现HashSet自身并没有独立的实现,而是在里面封装了一个地图。
HashSet是作为映射的键而存在的
而价值是一个命名为当前的静态的对象对象,因为是一个类属性,所以只会有一个。
私有静态最终对象现在=新对象(); 包集合; 进口java.util.AbstractSet; 进口java.util.HashMap; 进口java.util.Iterator; 进口java.util.Set; 公开课HashSet扩展AbstractSet 可克隆,实现Set 地图; 私有静态最终对象现在=新对象();//HashSet的构造方法初始化这个HashMap 公共HashSet () { 地图=new HashMap (); }//向HashSet中增加元素,其实就是把该元素作为关键,增加到地图中//值是,静态、最终的对象,所有的HashSet都使用这么同一个对象 公共逻辑加(E E) { 返回地图。把(e)==零; }//HashSet的大小就是地图的大小 公共int大小(){ 返回map.size (); }//清就空集是清空地图 公共空间clear () { map.clear (); }//迭代集,就是把映射的键拿出来迭代 公共Iterator iterator () { .iterator返回map.keySet () (); } }
练习:HashSet
创建一个长度是100的字符串数组
使用长度是2的随机字符填充该字符串数组