设为首页 加入收藏

TOP

Java集合中Set都有哪些特性?看这篇就够了!(二)
2023-07-25 21:22:42 】 浏览:65
Tags:Java Set 都有哪
后根据该hashCode值决定该对象在HashSet中的存储位置。此时如果有两个元素通过equals()方法进行比较,返回的结果为true,但它们的hashCode却不相等,HashSet也会把它们存储在不同的位置,我们依然可以添加成功。也就是说,如果两个对象的hashCode值相等,且通过equals()方法比较返回的结果也为true, HashSet集合才会认为两个元素相等

与本节内容配套的视频链接如下: https://www.bilibili.com/video/BV1Ja411x7XB?t=0.0

4. 使用案例

我们通过一个简单的案例,来看看HashSet的基本用法。

import java.util.HashSet;

/**
 * @author 一一哥Sun
 */
public class Demo11 {

	public static void main(String[] args) {
		//创建HashSet集合
		HashSet<String> set = new HashSet<String>();
		set.add("一一哥");
		set.add("壹壹哥");
		set.add("java");
		//重复元素无法被添加进去
		set.add("java");
		System.out.println(set);

        //集合遍历
		Iterator<String> it = set.iterator();
	    while (it.hasNext()) {
	    	//输出Set集合中的每个元素
	        System.out.println("值="+it.next()); 
	    }
	}
}

在上面的代码中,我们通过HashSet的构造方法创建了一个Set集合对象,并将几个元素对象存储到了这个Set集合中。

然后我们使用HashSet类中的iterator()方法获取一个Iterator对象,并调用hasNext()方法遍历集合元素,再使用next()方法获取到下一个数据元素。但是HashSet输出的元素是无序的,输出时既不是添加元素的顺序,也不是String排序的顺序,在不同版本的JDK中,这个顺序可能也是不同的。另外因为Set是不可重复的,如果我们向Set集合中添加了两个相同的元素,则后添加的会覆盖前面添加的元素,所以Set集合中不会出现相同的元素。

5. 配套视频

与本节内容配套的视频链接如下:戳链接一键直达

三. TreeSet集合

1. 简介

TreeSet是一种很常用的集合类型,它实现了Set和SortedSet接口,并且继承自AbstractSet抽象类。TreeSet集合中的元素也是唯一的,不允许重复。TreeSet集合的底层基于红黑树,可以使用自然排序或指定的比较器对集合中的元素进行排序。该类具有如下特点:

  • TreeSet集合中的元素是唯一的,不允许重复。
  • TreeSet集合中的元素是有序的, 因为实现了 SortedSet 接口 ,具有字典顺序, 可以通过迭代器按照升序或降序遍历。
  • TreeSet集合没有固定的大小限制,可以动态地添加和删除元素。
  • TreeSet集合提供了高效的元素查找和判断功能。

另外,SortedSet接口是Set接口的子接口,能够对集合进行自然排序,因此TreeSet类默认情况下就是自然排序(升序)的。但TreeSet只能对实现了Comparable接口的类对象进行排序,所以我们使用TreeSet集合存储对象时,该对象必须要实现Comparable接口。这是因为Comparable接口中有一个compareTo(Object o)方法,可以比较两个对象的大小。例如,a.compareTo(b),如果 a 和 b 相等,则该方法会返回 0;如果 a 大于 b,则该方法返回大于 0 的正值;如果 a 小于 b,则该方法返回小于 0 的负值。

2. 常用方法

除了Set类中通用的方法之外,TreeSet类还有如下几个特有的方法:

方法名称 说明
E first() 返回该集合中的第一个元素,E表示返回元素的数据类型
E last() 返回该集合中的最后一个元素
E poolFirst() 获取并移除该集合中的第一个元素
E poolLast() 获取并移除该集合中的最后一个元素
SortedSet subSet(E fromElement,E toElement) 返回一个新的集合,新集合会包含源集合fromElement与目标集合toElement之间的所有对象。结果会包含fromElement对象,但不包含toElement对象。
SortedSet headSet<E toElement〉 返回一个新的集合,新集合包含原集合中toElement对象之前的所有对象,但不包含 toElement对象。
SortedSet tailSet(E fromElement) 返回一个新的集合,新集合包含原集合中fromElement对象之后的所有对象,会包含fromElement对象。

因为TreeSet中的元素是有序的,所以增加了访问第一个、前一个、后一个、最后一个元素的相关方法,并提供了3个从 TreeSet中截取子TreeSet的方法。

3. 去重原理

当TreeSet集合在保存对象元素时,集合对象必须实现Comparable接口,并重写compareTo方法,该方法有如下两个作用:

  • 排序: 返回值大于0表示升序,返回值小于0表示降序;
  • 去重(返回值为0) :TreeSet认为返回0,表示两个对象是相同的对象。

所以我们利用TreeSet实现去重的原理就是:如果compareTo()方法的返回值为0,则认为是相同的对象;如果compareTo()方法的返回大于0,则是升序排序;如果小于0,则是降序排序。

4. 使用案例

接下来我们再通过一个案例来看看TreeSet的用法。

4.1 编写Person类

首先我们设计一个Person类,该类要实现Comparable接口。当TreeSet集合在保存对象元素时,集合中添加的元素对象必须实现Comparable接口,并重写compareTo方法。如果没有实现Comparable接口,那么创建TreeSet时必须传入一个Comparator对象。

/**
 * @author 一一哥Sun
 * 实现Comparable接口,并重新compareTo()方法
 */
public class Person implements Comparable<Person>{

	private String username;
    private String password;
    
    public Person() {
    }
    
    public Person(String username, String password) {
        super();
        this.username = username;
        this.password = password;
    }
    
    @Override
    public String toString() {
        return "User
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java使用HttpClient以multipart/f.. 下一篇【Java】引用传递?值传递?

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目