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);
}
}