Set<Integer> set = new HashSet<>();
set.add(1);
set.add(3);
set.add(2);
set.add(1);
//使用迭代器遍历set集合
Iterator<Integer> it = set.iterator();
while(it.hasNext()){
Integer n = it.next();
System.out.println(n); // 1 2 3
}
//使用增强for遍历set集合
for(Integer i:set){
System.out.println(i); // 1 2 3
}
【Set 接口】
是用于存储无序的、不重复的数据,且不能通过索引访问元素
boolean add(E e) | 如果此set集合尚未存在指定的元素,则添加此元素 |
boolean addAll(Collection<? extends E> c) | 将参数集合中所有元素添加到此set集合的尾部 |
boolean remove(Object obj) | 将指定参数对象移出集合 |
void clear() | 移出set集合中所有元素 |
Iterator iterator() | 返回此set中的元素上进行迭代的迭代器 |
int size() | 返回此set集合中所有的元素数 |
boolean isEmpty() | 如果set不包含元素,则返回set |
是基于哈希表的Set集合
当需要存对象时,就重写equals和hashCode方法
/**
* 如果对象类型是User,先比较hashcode,一致的场合再比较每个属性的值
*/
@Override
public boolean equals( Object obj ) {
if (obj == null) {
return false;
}
if (this == obj) {
return true;
}
if (obj instanceof User ) {
User user= (User) obj;
// 比较每个属性的值一致时才返回true
if (user.id.equals(this.id)) {
return true;
}
}
return false;
}
/**
* 重写hashcode方法,返回的hashCode一样才再去比较每个属性的值
*/
@Override
public int hashCode() {
return id.hashCode();
}
是基于双向链表和哈希表、继承自HashSet的Set集合
是基于红黑树、实现了Set接口,具有排序功能的Set集合。