Java基础之Collections框架Set接口及其使用和源码分析

Java基础之Collections框架Set接口及其使用和源码分析

Set接口

集合是不能包含重复元素的集合。Set接口只包含从集合继承的方法,并添加了禁止重复元素的限制。Set还为equals和hashCode操作的行为添加了一个更强的契约,而不是从集合接口继承的契约。允许对Set实例进行有意义的比较,即使它们的实现类型不同。如果两个Set实例包含相同的元素,则它们是相等的。
Java平台包含三个通用的Set实现:HashSet、TreeSet和LinkedHashSet。将元素存储在哈希表中的HashSet是性能最好的实现;但是,它不能保证迭代的顺序。TreeSet将元素存储在红黑树中,并根据元素的值对其进行排序;它比HashSet慢得多。LinkedHashSet实现为一个散列表,其中贯穿着一个链表,它根据元素插入到集合中的顺序(插入顺序)对元素进行排序。

Set使用

Set简单使用

Collection<String> ops = new HashSet<>();
||
Set<String> sets = new HashSet<>();
//可以使用set去重collection中的重复元素
Collection<String> linkedHashSetR= new LinkedHashSet<String>(c);

Set JDK8操作

#在java 8中使用stream进行去重
c.stream().collect(Collectors.toSet());  //去重
#将数组中的相关的值保存到treeSet中
List<Person> persons = new ArrayList<>();
Person person = new Person();
person.setName("tony");
person.setLast("Smith");
persons.add(person);
Set<String> nameSets = persons.stream().map(Person::getName).collect(TreeSet::new);

Set源码相关方法

//返回元素的个数
int size();

/**

判断是否为空
*/
boolean isEmpty();

/**
判断集合中是否包含指定的元素
 */
boolean contains(Object o);

/**
 返回集合的迭代器
 */
Iterator<E> iterator();

/**
将集合转换为数组
 */
Object[] toArray();

/**
 返回指定类型的数组
 */
<T> T[] toArray(T[] a);


// Modification Operations

/**
添加元素,这个和collect的不同实现有把不同的规则
 */
boolean add(E e);


/**

移除指定的元素
*/
boolean remove(Object o);

/**
set中是否包含指定集合中的所有元素
 */
boolean containsAll(Collection<?> c);

/**
添加指定集合中的所有元素,会去重
 */
boolean addAll(Collection<? extends E> c);

/**
 保留指定集合中的元素
 */
boolean retainAll(Collection<?> c);

/**

移除指定集合中的所有元素
*/
boolean removeAll(Collection<?> c);

/**
 清空set集合中的所有元素
 */
void clear();

/**
 进行比较操作
 */
boolean equals(Object o);

/**
 生产set的hashCode值
 */
int hashCode();

/**
	返回一个Spliterator操作
 */
@Override
default Spliterator<E> spliterator() {
    return Spliterators.spliterator(this, Spliterator.DISTINCT);
}

基本上和collection的接口中的方法一致,只是在进行add的时候做了
去重的处理。我们看看它的相关实现,看看相关方法的具体实现操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章