JAVA集合框架——规则集

本文详细介绍了Java集合框架中的规则集,包括Collection接口、AbstractCollection类,以及Set接口的实现类HashSet、LinkedHashSet和TreeSet。讨论了各集合类的特点、性能和使用场景,如HashSet的高效插入和删除,LinkedHashSet的元素插入顺序保持,以及TreeSet的排序功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA集合框架

Java集合框架——规则集

1.集合

Java集合框架支持三种主要类型:规则集(Set),线性表(List)和队列(Queue)。Set的实例用于存储一组不重复的元素。List的实例用于存储一个由元素构成的有序集合,Queue的实例用于村粗具有先进先出处理方式的对象。这些集合的通特性都被定义在接口中,而实现是在具体类中提供的。Java集合类框架中定义的所有接口和类都存储在java.util中。
Java集合框架的设计师使用接口、抽象类和具体类共同实现的。用接口定义框架,用抽象类提供这个接口的部分实现,具体类用具体的数据结构实现这个接口。
Java集合框架支持一下两种类型的容器:

  • 集合(Collection):用于存储一元素。
  • 图(Map):用于存储键/值对。

Collection是描述所有序列容器的共性的根接口,它可能会被认为是一个附属接口,即因为要表示其他若干个接口的共性而出现的接口。java.util.AbstractCollection提供了Collection的默认实现,使得我们可以创建AbstractCollection的子类型,而其中没有不必要的代码的重复。

1.1 Collection接口和AbstractCollection类

Collection接口是处理对象集合的根接口。AbstractCollection类是提供Collection接口部分实现的抽象类。在Java集合框架中,抽象类实现了除了Size和iterator之外的所有方法,上述两个方法在合适的具体类中实现。Collection接口提供了在集合中添加和删除的基本操作。以下表格将展示出Collection接口中的具体方法。

方法名功能
boolean add(E e)向集合中添加新元素e
boolean addAll(Collection c)将集合c中的所有元素添加给这个集合
void clear()删除集合中的所有元素
boolean contains(Object o)判断集合是否包含元素o
boolean contains(Collection c)判断集合是否包含集合c中的所有元素
boolean equals(Object o)判断该集合与另一个集合是否相等
int hashCode()返回该集合的散列码
boolean isEmpty()判断该集合是否包含元素,若为空则返回true
Iterator iterator()返回该集合中元素所用的迭代器
boolean remove(Object o)从集合中删除元素o
boolean reamoveAll(Collection c)从集合中删除c包含的所有元素
boolean retainAll(Collection c)保留集合中c包含的所有元素
int size()返回集合的元素个数
Object[] toArray()返回该集合的元素构成的数组Object

上述方法中有一个迭代器方法,即iterator(),该方法返回这个集合元素中所使用的迭代器,迭代器中包含了一系列包括遍历、判断是否还有下一位元素等等的方法。这里给出迭代器中的具体方法。

方法名功能
boolean hasNext()如果迭代器有更多的元素需要遍历返回true
E next()返回下一个元素
void remove()删除使用next方法获取的最后一个元素
2. 规则集

规则集(Set)扩展了collection接口,但并没有引入新的方法或常量,知识规定sET的实例不包含重复的元素。实现Set的具体类必须要确保没有向这个规则集添加重复的元素。AbstractSet类是一个抽象类,它扩展了AbstractCollection类并实现了Set接口。AbstractSet提供了equals方法和hashCode方法的具体实现。规则集的散列码是指这个规则集中所有元素散列码的和。
Set接口下有三个具体类:散列类HashSet,链式散列集LinkedHashSet以及树形集TreeSet。

2.1 散列集HashSet

HashSet类是一个具体类,可以用于存储互不相同的任何元素。默认情况下,初始容量为16且客座率为0.75,这表示当HashSet内容量达到12时(初始容量的75%),散列集的容量会翻倍到32。比较高的客座率会降低空间开销,但会增加查找时间。由于规则集是Collection的一个实例,因此所有定义在Collection中的方法都可以用在规则集上。构造散列集方法如下所示。

public class testCollection{
  public static void main(String[] args){
    java.util.Set<E> set1=new java.util.HashSet<E>();
  }
}
2.2 链式散列集LinkedHashSet

LinkedHashSet用一个链表实现来扩展HashSet类,它支持对规则集内的元素排序。HashSet中的元素时没有被排序的,而LinkedHashSet中的元素可以按照他们插入规则集的顺序提取。LinkedHashSet的构造方法类似于HashSet。如果不许要维护元素被插入的顺序,就应该使用HashSet,因为后者比LinkedHashSet更加高效。构造方法如下。

import java.util.*;
public class testCollection{
  public static void main(String[] args){
    Set<E> set=new LinkedHashSet<E>();
  }
}
2.3 树形集TreeSet

SortedSet是Set的一个子接口,它可以确保规则集中的元素时有序的。另外TreeSet还提供了first()和last()方法以返回规则集中的首尾元素,以及headSet(E toElement)和tailSet(E fromElement)方法,上述两个方法返回规则集中元素小于toElement的部分和元素大于或等于fromElement的那一部分。
TreeSet实现了SortedSet接口的一个具体类。只要添加的元素是可以比较的,就可以将他们添加到一个树形集当中。下面是两种比较对象的方法。

  • 使用Comparable接口。添加到规则集中的元素都是Comparable的实例,因此可以使用compareTo的方法对他们进行比较。
  • 使用Comparator接口。并非所有的类都实现了Comparable接口,或者实现Comparable接口的类中不想使用compareTo的方法进行比较,那么可以给规则集中的元素指定一个比较器。

Java集合框架中的所有具体类都至少包含两个构造方法,一个是创建空集合的无参构造方法;另一个是用某个集合来创建实例的构造方法。以下程序给出了TreeSet的具体构造方法。

import java.util.*;
public class testCollection{
  public static void main(String[] args){
    TreeSet<E> set=new TreeSet<E>();
  }
}
3 小结

总而言之,当我们在更新一个规则集时,如果不需要保持元素的排序关系,就应该使用散列集(HashSet),因为在散列集中插入和删除元素所花费的时间较少。当需要一个排好序的集合时,可以从这个散列集创建一个树形集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值