一. 简介
HashSet 是 Set 常见的子类对象, 此类实现 Set 接口, 由哈希表 (实际为 HashMap 实例) 支持. 对集合的迭代次序不作任何保证; 特别是, 它不能保证订单在一段时间内保持不变. 这个类允许 null 元素.
这个类提供了基本操作 (add,remove,contains 和 size) 固定的时间性能, 假定哈希函数将分散的桶中正确的元素. 迭代此集合需要与 HashSet 实例的大小 (元素数量) 和后台 HashMap 实例 (桶数) 的 "容量" 的总和成比例的时间. 因此, 如果迭代性能很重要, 不要将初始容量设置得太高 (或负载因子太低) 是非 常重要的.
Set 集合是无序, 在存储时哈希表是按哈希值的顺序存储的, 所谓的无序就是说在存储的顺序和你加入的顺序可能不同. 当两对象的哈希地址值相同时, 哈希表中存储时先判断是否为同一个对象, 若为同一个对象则不重复存储, 若判断为不同对象则在其下方顺延而不是向右顺延.
二. 常用方法说明
- import java.util.HashSet;
- import java.util.Iterator;
- public class Set_1 {
- public static void main(String[] args){
- // 产生 HashSet 对象
- HashSet hashset1 = new HashSet();
- // 添加元素
- boolean b1 = hashset1.add("111"); // 添加此元素之前无重复, 故返回值为 true
- hashset1.add("22");
- hashset1.add("333");
- hashset1.add("1");
- boolean b2 = hashset1.add("111");
- System.out.println("b1="+b1+";b2="+b2); // 此元素在集合中已存在, 添加后返回值结果为 false
- String arry1[] = {"arry1","arry2","arry3"};
- int arry2[] = {11,22,3,44};
- HashSet hashset2 = new HashSet();
- hashset1.add(arry1);
- hashset1.add(arry2);
- hashset2.add("you");
- hashset2.add("are");
- hashset2.add("yourself");
- // 使用 addAll 添加一个集合
- hashset1.addAll(hashset2);
- System.out.println(hashset1); // 无序, 取出的顺序与存入的顺序可能不同, 但每次取出的顺序是相同的哦(不要认为每次取出的顺序都不同),
- System.out.println("--------------------- 开始迭代器 --------------------------");
- // 迭代器循环取出 HashSet 中的元素
- Iterator it1 = hashset1.iterator();
- // 使用 while, 循环获取迭代器中的每个元素
- // while (it1.hasNext()){
- // System.out.println(it1.next());
- // }
- // 使用 for, 循环获取迭代器中的每个元素
- System.out.println("it1.hasNext()="+it1.hasNext());
- for (;it1.hasNext();){
- System.out.println(it1.next());
- }
- }
- }
待续
来源: http://www.bubuko.com/infodetail-2708974.html