Java 学习总结(十六)
程序员文章站
2022-06-09 21:13:27
...
Java 基础总结(十六)
Set集合:
一、HashSet类
HashSet类是Set接口的典型实现类。大多数情况下使用Set集合时候就是使用这个实现类。 HashSet类是按Hash算法来存储集合中的元素的,因此具有很好的存取和查找性能。
HashSet类的特点:
1、 无序,不能保证元素的排列顺序,顺序可能与添加顺序不同,也有可能会发生变化。
2、 非线程安全(不同步),HashSet不是同步的(不是线程安全的),如果多个线程同时访问一个HashSet,假设有两个或者两个以上线程同时修改了 HashSet集合时,则必须通过代码来保证其同步。
3、 HashSet实现的集合元素值可以是null,但只能放入一个null。
向 HashSet集合中存入一个元素时, HashSet会调用该对象的hashCode()方法来获取该对象的哈希值,然后根据它的哈希值决定该对象在HashSet中的存储位置。如果有两个元素通过 equals方法比较返回true,但它们的hashCode()方法返回值不相等,则 HashSet将会把它们存储在不同的位置,依然可以添加成功。
示例代码:
package com.zst.collectiondemo.setdemo;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
/**
* set无序 不允许重复元素
* HashSet 可以放入null,但只能放入一个null
* @author ZST
*
*/
public class
HashSetDemo {
public static void main(String[] args) {
// HashSet根据哈希值排序,是无序的,
HashSet<String> set = new HashSet<>();
// 哈希值
// System.out.println("B".hashCode());
// 添加元素
// 只能添加一个元素,不允许重复,多的会返回false,不会再放进去
set.add("B");
set.add("A");
set.add("D");
set.add("C");
set.add("A");
set.add("F");
set.add("G");
set.add("I");
set.add("1");
System.out.println(set.add("I"));//返回false
set.add("I");
set.add("I");
set.add(null);// 可以放入null,但只能放入一个null
System.out.println(set);
// 移除
set.remove("I");
System.out.println(set);
List<String> list = new ArrayList<>();
list.add("X");
list.add("Z");
// 添加多个和移除多个
set.addAll(list);//添加多个
System.out.println(set);
set.removeAll(list);//移除多个
System.out.println(set);
// 输出set
System.out.println(set.toString());
// 遍历
System.out.println("foreach遍历:");
for (String string : set) {
System.out.print(string + " ");
}
// 迭代器遍历
System.out.println("\nIterator 迭代器 while:");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
System.out.println("\nIterator 迭代器 for:");
for (Iterator<String> iterator2 = set.iterator(); iterator2.hasNext();) {
String string = (String) iterator2.next();
System.out.print(string + " ");
}
// 获取元素个数
System.out.println("HashSet的元素的个数:" + set.size());
// HashSet中是否包含某个元素
System.out.println("HashSet中是否包含某个元素:" + set.contains("F"));
System.out.println("HashSet中是否包含某个列表的元素:" + set.containsAll(list));
// 清空set
set.clear();
System.out.println("set是否为空:" + set.isEmpty());
}
}
上一篇: java IO 文件与数据流
下一篇: Java SE 8 的Date和Time