JAVA集合框架之Set接口实现类

在上一篇《JAVA集合框架》中为大家介绍了JAVA集合框架的基本组成,这一片开始将为大家介绍集合框架中常用的实现类的用法。

java.util.HashSet< E >

此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。这是我们最常用的Set接口的实现类。

构造方法

方法名 说明
HashSet() 构造一个新的空 set,其底层 HashMap 实例的默认初始容量是 16,加载因子是 0.75
HashSet(Collection< ? extends E> c) 构造一个包含指定 collection 中的元素的新 set
HashSet(int initialCapacity) 构造一个新的空 set,其底层 HashMap 实例具有指定的初始容量和默认的加载因子(0.75)
HashSet(int initialCapacity, float loadFactor) 构造一个新的空 set,其底层 HashMap 实例具有指定的初始容量和指定的加载因子

方法摘要

返回值 方法名 说明
boolean add(E e) 如果此 set 中尚未包含指定元素,则添加指定元素
void clear() 从此 set 中移除所有元素
Object clone() 返回此 HashSet 实例的浅表副本:并没有复制这些元素本身
boolean contains(Object o) 如果此 set 包含指定元素,则返回 true
boolean isEmpty() 如果此 set 不包含任何元素,则返回 true
Iterator< E > iterator() 返回对此 set 中元素进行迭代的迭代器
boolean remove(Object o) 如果指定元素存在于此 set 中,则将其移除
int size() 返回此 set 中的元素的数量(set 的容量)

使用示例

import java.util.HashSet;
import java.util.Iterator;

public class HashSetDemo
{
   public static void main(String[] args)
   {
      // 创建一个HashSet对象,<String>为泛型,表明HashSet中的元素必须是String类型
      HashSet<String> set = new HashSet<String>();
      // 添加元素
      set.add("jiang");
      set.add("gu");
      set.add("jin");
      System.out.println("集合中的元素个数为:" + set.size());
      // 判断集合中是否包含指定元素
      System.out.println(set.contains("jiang"));
      // 遍历集合中的元素
      System.out.println("集合中的元素为(迭代器Iterator):");
      Iterator<String> iterator = set.iterator();
      while (iterator.hasNext())
      {
         System.out.println(iterator.next());
      }
      System.out.println("集合中的元素为(foreach):");
      for (String item : set)
      {
         System.out.println(item);
      }
   }
}

运行结果:
集合中的元素个数为:3
true
集合中的元素为(迭代器Iterator):
jin
jiang
gu
集合中的元素为(foreach):
jin
jiang
gu

需要注意的是,遍历元素时,打印输出的顺序可能与上述结果不同,因为HashSet它不保证迭代顺序,特别是它不保证该顺序恒久不变。如果我们想要元素迭代顺序与添加顺序相同,那么我们可以使用HashSet的子类java.util.LinkedHashSet<E>,该类用法与HashSet相同,就不在举例子了。

java.util.TreeSet< E >

有时候,我们对集合种元素的顺序有更高的要求,我么需要元素按自然顺序排序,TreeSet就为我们提供了这样的功能。TreeSet使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。

构造方法

方法名 说明
TreeSet() 构造一个新的空 set,该 set 根据其元素的自然顺序进行排序
TreeSet(Collection< ? extends E> c) 构造一个包含指定 collection 元素的新 TreeSet,它按照其元素的自然顺序进行排序
TreeSet(Comparator< ? super E> comparator) 构造一个新的空 TreeSet,它根据指定比较器进行排序
TreeSet(SortedSet< E> s) 构造一个与指定有序 set 具有相同映射关系和相同排序的新 TreeSet

方法摘要

返回值 方法名 说明
boolean add(E e) 将指定的元素添加到此 set(如果该元素尚未存在于 set 中)
boolean addAll(Collection< ? extends E> c) 将指定 collection 中的所有元素添加到此 set 中
E ceiling(E e) 返回此 set 中大于等于给定元素的最小元素;如果不存在这样的元素,则返回 null
void clear() 移除此 set 中的所有元素
Object clone() 返回 TreeSet 实例的浅表副本
Comparator< ? super E> comparator() 返回对此 set 中的元素进行排序的比较器;如果此 set 使用其元素的自然顺序,则返回null
boolean contains(Object o) 如果此 set 包含指定的元素,则返回 true
Iterator< E> descendingIterator() 返回在此 set 元素上按降序进行迭代的迭代器
NavigableSet< E> descendingSet() 返回此 set 中所包含元素的逆序视图
E first() 返回此 set 中当前第一个(最低)元素
E floor(E e) 返回此 set 中小于等于给定元素的最大元素;如果不存在这样的元素,则返回 null
SortedSet< E> headSet(E toElement) 返回此 set 的部分视图,其元素严格小于 toElement
NavigableSet< E> headSet(E toElement, boolean inclusive) 返回此 set 的部分视图,其元素小于(或等于,如果 inclusive 为 true)toElement
E higher(E e) 返回此 set 中严格大于给定元素的最小元素;如果不存在这样的元素,则返回 null
boolean isEmpty() 如果此 set 不包含任何元素,则返回 true
Iterator< E> iterator() 返回在此 set 中的元素上按升序进行迭代的迭代器
E last() 返回此 set 中当前最后一个(最高)元素
E lower(E e) 返回此 set 中严格小于给定元素的最大元素;如果不存在这样的元素,则返回 null
E pollFirst() 获取并移除第一个(最低)元素;如果此 set 为空,则返回 null
E pollLast() 获取并移除最后一个(最高)元素;如果此 set 为空,则返回 null
boolean remove(Object o) 将指定的元素从 set 中移除(如果该元素存在于此 set 中)
int size() 返回 set 中的元素数(set 的容量)
NavigableSet< E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) 返回此 set 的部分视图,其元素范围从 fromElement 到 toElement
SortedSet< E> subSet(E fromElement, E toElement) 返回此 set 的部分视图,其元素从 fromElement(包括)到 toElement(不包括)
SortedSet< E> tailSet(E fromElement) 返回此 set 的部分视图,其元素大于等于 fromElement
NavigableSet< E> tailSet(E fromElement, boolean inclusive) 返回此 set 的部分视图,其元素大于(或等于,如果 inclusive 为 true)fromElement

使用示例

import java.util.Iterator;
import java.util.TreeSet;

public class TreeSetDemo
{
   public static void main(String[] args)
   {
      // 创建一个TreeSet对象,<String>为泛型,表明TreeSet中的元素必须是String类型
      TreeSet<String> set = new TreeSet<String>();
      // 添加元素
      set.add("jiang");
      set.add("gu");
      set.add("jin");
      System.out.println("集合中的元素个数为:" + set.size());
      // 判断集合中是否包含指定元素
      System.out.println(set.contains("jiang"));
      System.out.println("集合中第一个元素为:" + set.first());
      System.out.println("集合中最后一个元素为:" + set.last());
      // 遍历集合中的元素
      System.out.println("集合中的元素为(迭代器Iterator):");
      Iterator<String> iterator = set.iterator();
      while (iterator.hasNext())
      {
         System.out.println(iterator.next());
      }
      System.out.println("集合中的元素为(foreach):");
      for (String item : set)
      {
         System.out.println(item);
      }
   }
}

通过上面的例子,其实我们可以发现TreeSet和HashSet的用法也是非常类似的。

时间: 2024-12-31 01:06:46

JAVA集合框架之Set接口实现类的相关文章

JAVA集合框架之List接口实现类

上一篇博客<JAVA集合框架之Set接口实现类>中介绍了Set接口的相关实现类,这一篇将介绍List接口的实现类. java.util.ArrayList< E > ArrayList有点类似于数组,相比较于数组而言,ArrayList可以动态的更改元素个数,相对于数组较为灵活. 每个 ArrayList 实例都有一个容量.该容量是指用来存储列表元素的数组的大小.它总是至少等于列表的大小.随着向 ArrayList 中不断添加元素,其容量也自动增长.并未指定增长策略的细节,因为这不

JAVA集合框架之Map接口实现类

java.util.HashMap<K,V> 基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同.)此类不保证映射的顺序,特别是它不保证该顺序恒久不变. 此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能.迭代 collection 视图所需的时间与 HashMap 实例的"容量"(桶的

java | 集合框架

集合框架 集合代表了一组对象,Java中的集合框架定义了一套规范,用来表示.操作集合,使具体操作与实现细节解耦. 而这些操作无非就是增.删.改.查! 集合和数组的区别: 1.数组的长度固定,集合长度可变. 2.数组只能存储相同类型的数据(基本类型/引用类型),集合可存储各种类型的数据. Java集合框架接口 Java集合框架的顶层接口包括: 一.Collection接口: 1.实现Collection接口的集合有List.Set.Queue(Java队列实现). 2.List:排列有序,可以有重

关于Java集合框架面试题(含答案)上_java

1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久.它还包括在Java并发包中,阻塞接口以及它们的实现.集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类. (2)随着使用经过严格测试的集合框架类,代

Java集合框架List,Map,Set等全面介绍

Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构.   Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +--java.util.LinkedList [C]   +--java.util.Vector [C]      +--java.util.Stack [C]+--ja

Java集合源码剖析:Java集合框架

Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组.链表.栈.队列.集合.哈希表等.学习Java集合框架下大致可以分为如下五个部分:List列表.Set集合.Map映射.迭代器(Iterator.Enumeration).工具类(Arrays.Collections). Java集合类的整体框架如下: 从上图中可以看出,集合类主要分为两大类:Collection和Map. Collection是List.Set等集合高度抽象出来的接口,它包含了这些集合的基本操作,它主

java集合框架中List的定义及注意事项

大家知道,集合框架是为了表示和操作集合而规定的一种统一的标准的体系结构,学习集合知识有利于我们解决一系列例如保存数据与对象的问题. 常用的集合在系统中定义了两大接口,List和Set 这里我们就来讨论一下List 的定义以及一些常见的问题 List定义的是有序的并且数据可以重复的集合,我们先看一下下面这段代码: import java.util.ArrayList; import java.util.List; publicclass ListTest{ publicstaticvoid mai

JAVA集合框架_相当重要

什么要有集合          面向对象语言对事物的体现都是以对象的形式体现,所以为了方便对多个对象的操作,就是对对象进行存储,集合就是存储对象最常用的一个方式. 数组与集合有什么不用        数组的长度是固定的,而集合的长度是可变的.        数组可以存储基本数据类型,而集合只能存储对象. 集合的特点 集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象. 什么是框架          框架(framework)是一个类的集,它奠定了创建高级功能的基础.框架包含很多超类

[Java] 集合框架的层次结构和使用规则梳理

在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类).所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectionFramework). Java程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这些类创建出来一些对象,然后直接应用就可以了,这样就大大提高了编程效率. 概述 什么是框架?  类库的集合 什么是集合? 存放数据的容器 集合框架用来干什么? 用来表示和操作的统一的架构 集合框架包含了两部分:一