HashSet也是一个集合,不包含重复的元素和相同的元素,无序的,不提供索引(下标)所以不能通过下表获取元素
    只能通过迭代器访问 - 增强for循环

    HashSet怎么做到不重复的?

    1. 首先在元素存放进这个集合之前会通过HashCode( )方法算出哈希值(int类型值)
    2. 比较当前这个哈希值在集合中是否存在,如果存在就不保存

    所以HashSet称之为无序不可重复集
    **

    1. package Test18_Demo.Demo05;/*
    2. @create 2020--12--08--11:04
    3. */
    4. import java.util.HashSet;
    5. import java.util.Iterator;
    6. public class HashSetDemo {
    7. public static void main(String[] args) {
    8. //创建集合对象
    9. HashSet<String> set = new HashSet<>();
    10. //向集合中添加元素
    11. set.add("路飞");
    12. set.add("路飞");
    13. set.add("索隆");
    14. set.add("山治");
    15. set.add("娜美");
    16. set.add("罗宾");
    17. set.add("乌索普");
    18. //打印的结果 - 无序、不可重复
    19. System.out.println(set);//[山治, 罗宾, 娜美, 索隆, 乌索普, 路飞]
    20. System.out.println("=============");
    21. //获取元素 - 只能使用迭代器
    22. Iterator<String> iterator = set.iterator();
    23. while (iterator.hasNext()) {
    24. //推荐向下转型 - 强制类型转换 - 目的是为了增加代码的健壮性 - 转成最后需要接收的类型
    25. String thisName = (String) iterator.next();
    26. System.out.println(thisName);
    27. }
    28. System.out.println("=============");
    29. //增强for循环底层就是一个迭代器
    30. for (String name: set
    31. ) {
    32. System.out.println(name);
    33. }
    34. System.out.println("=============");
    35. //普通for循环
    36. for (int i = 0; i < set.size(); i++) {
    37. //因为get方法用于根据下标获取所对应的元素,但是这个HashSet没有下标,所以不提供get方法,所以普通for循环行不通
    38. //System.out.println(set.get(i));
    39. }
    40. }
    41. }

    示例:

    1. /**
    2. * 求一个字符串一共有多少个不重复的字母
    3. * 1.字符串:fadfasldkfahfkl
    4. * 2.区分大小写
    5. * 3.打印出:不重复的字母有n个
    6. *
    7. * 分析:
    8. * 1.将字符串分为一个个单个的字符
    9. * 2.判断字符是否为字母
    10. * 如果时字母,放到一个set集合中
    11. * 3.查看set集合的长度
    12. *
    13. */
    14. package Test18_Demo.Demo05;/*
    15. @create 2020--12--08--11:24
    16. */
    17. import java.util.ArrayList;
    18. import java.util.Arrays;
    19. import java.util.HashSet;
    20. public class HashSetTest {
    21. public static void main(String[] args) {
    22. //定义一个不含重复元素的集合
    23. HashSet<Character> set = new HashSet<>();
    24. //准备一个字符串
    25. String s = "sdfadfFDSDFasfFDSFwerFDSJLJLfsaflkjl";
    26. //拆分字符串
    27. char[] chs = s.toCharArray();
    28. //遍历 - 无下标的
    29. for (char c: chs
    30. ) {
    31. //判断是不是字母,如果时字母就放到set中
    32. if ((c < 'z' && c > 'a') || (c < 'Z' && c > 'A')) {
    33. set.add(c);
    34. }
    35. }
    36. System.out.println("不重复的字母有"+set.size()+"个");
    37. System.out.println(set);
    38. }
    39. }