HashSet也是一个集合,不包含重复的元素和相同的元素,无序的,不提供索引(下标)所以不能通过下表获取元素
只能通过迭代器访问 - 增强for循环
HashSet怎么做到不重复的?
- 首先在元素存放进这个集合之前会通过HashCode( )方法算出哈希值(int类型值)
- 比较当前这个哈希值在集合中是否存在,如果存在就不保存
所以HashSet称之为无序不可重复集
**
package Test18_Demo.Demo05;/*@create 2020--12--08--11:04*/import java.util.HashSet;import java.util.Iterator;public class HashSetDemo {public static void main(String[] args) {//创建集合对象HashSet<String> set = new HashSet<>();//向集合中添加元素set.add("路飞");set.add("路飞");set.add("索隆");set.add("山治");set.add("娜美");set.add("罗宾");set.add("乌索普");//打印的结果 - 无序、不可重复System.out.println(set);//[山治, 罗宾, 娜美, 索隆, 乌索普, 路飞]System.out.println("=============");//获取元素 - 只能使用迭代器Iterator<String> iterator = set.iterator();while (iterator.hasNext()) {//推荐向下转型 - 强制类型转换 - 目的是为了增加代码的健壮性 - 转成最后需要接收的类型String thisName = (String) iterator.next();System.out.println(thisName);}System.out.println("=============");//增强for循环底层就是一个迭代器for (String name: set) {System.out.println(name);}System.out.println("=============");//普通for循环for (int i = 0; i < set.size(); i++) {//因为get方法用于根据下标获取所对应的元素,但是这个HashSet没有下标,所以不提供get方法,所以普通for循环行不通//System.out.println(set.get(i));}}}
示例:
/*** 求一个字符串一共有多少个不重复的字母* 1.字符串:fadfasldkfahfkl* 2.区分大小写* 3.打印出:不重复的字母有n个** 分析:* 1.将字符串分为一个个单个的字符* 2.判断字符是否为字母* 如果时字母,放到一个set集合中* 3.查看set集合的长度**/package Test18_Demo.Demo05;/*@create 2020--12--08--11:24*/import java.util.ArrayList;import java.util.Arrays;import java.util.HashSet;public class HashSetTest {public static void main(String[] args) {//定义一个不含重复元素的集合HashSet<Character> set = new HashSet<>();//准备一个字符串String s = "sdfadfFDSDFasfFDSFwerFDSJLJLfsaflkjl";//拆分字符串char[] chs = s.toCharArray();//遍历 - 无下标的for (char c: chs) {//判断是不是字母,如果时字母就放到set中if ((c < 'z' && c > 'a') || (c < 'Z' && c > 'A')) {set.add(c);}}System.out.println("不重复的字母有"+set.size()+"个");System.out.println(set);}}
