set
Set 的特点是去重,如果相同的数据只会保留一个。集合内的数据是一个无序的状态,。当然也有例外,TreeSet就是有序的。 确定性 互异性 无序性
方法名 | 说明 |
---|---|
add(E e) | 增加单个数据 |
addAll(Collection<? extends E> c) | 将一个 Collection 集合的数据添加到现在的集合中 |
remove(Object o) | 删除指定的元素 |
contains(Object o) | 判断集合是否包含指定的元素 |
size() | 得到集合的数据总数 |
isEmpty() | 判断集合是否有数据 |
clear() | 清空数据 |
toArray() | 将List转为对象数组 |
可以看到,Set 和 List 中的方法都是相同的,作用也一致。但是 Set 是没有直接获取数据的方法。我们更多的时候使用的是 List 和 Map。
HashSet 由哈希表( 实际上是一个HashM ap 实例) 支持, 为基木操作提供了稳定性能, 这些基本操作包括add() 、remove() 、contains() 和size() , 假定哈希函数将这些元素正确地分布在桶中。 对此 set() 进行迭代所需的时间与HashSet 实例的大小( 元素的数量) 和底层HashMap 实例( 桶的数量)的“ 容量” 的和成比例。 因此, 如果迭代性能很重要, 则不要将初始容量没置得太高( 或将加载因了设置得太低) 。
public static void main(String[] args) {
HashSet set = new HashSet<>();
set.add( new Object() );
set.add( new Object() );
set.add( "hello" );
set.add( "hello" );
set.add( "你好" );
set.add( 123 );
set.add( 123 );
set.add( 234 );
set.remove("你好");
set.remove( new Object() );
for (Object object : set) {
System.out.println( object );
}
}
以上代码经输出可以看到:输出的内容没有按照输入时的顺序进行输出
李四
8890
张三
azxcv
ABC