ArrayBlockingQueue 是一个有界的阻塞队列,它存储由数组在内部支持的元素。
- ArrayBlockingQueue 类是Java集合框架的成员。
- 有界意味着它将有一个固定的大小,不能存储超过队列容量的元素数。
- 队列还遵循FIFO(先进先出)规则来存储和删除队列中的元素。
- 如果您试图将一个元素放入一个完整的队列,或者从一个空队列中获取一个元素,那么该队列将阻止您。
这个 德兰托( c组 ) 方法 从该队列中删除所有可用元素,并将它们添加到给定集合中 。也可以通过提供元素“n”的数量作为方法的第二个参数来固定需要排放的元素的数量。
根据传递给它的参数,有两种类型的drainTo方法:
1.drainTo()方法用于将所有元素转移到集合中。与使用循环重复轮询此队列相比,drain操作效率更高。在尝试向系统添加元素时,也可能会遇到失败 c组 正因为如此,当抛出关联的异常时,失败元素既不能出现在两个集合中,也不能同时出现在两个集合中。如果您试图将队列排入自身,则会引发IllegalArgumentException。如果在操作进行期间修改了指定的集合,则此操作的行为未定义。因此,为了使用这些方法,我们需要考虑这种情况,以便我们能够克服例外情况。
语法
public int drainTo(Collection c)
参数: 该方法接受一个参数 C 它指的是传递元素的集合
返回值: 该方法返回排出的元素数。
例外情况: 该方法可能会引发三种类型的异常:
- 不支持操作异常 –如果指定集合不支持添加元素
- 类别例外 –如果此队列的某个元素的类阻止将其添加到指定集合
- 空指针异常 –如果指定的集合为空
- 非法数据异常 –如果指定的集合是此队列,或者此队列元素的某些属性阻止将其添加到指定集合中
下面的程序演示了drainTo( c组 )ArrayBlockingQueue的方法。
JAVA
// Program to demonstrate drainTo(Collection c) import java.util.ArrayList; import java.util.concurrent.ArrayBlockingQueue; public class GFG { public static void main(String[] args) { // Define capacity of ArrayBlockingQueue int capacity = 10 ; // Create object of ArrayBlockingQueue ArrayBlockingQueue queue = new ArrayBlockingQueue(capacity); // Add elements to ArrayBlockingQueue queue.add( 23 ); queue.add( 32 ); queue.add( 45 ); queue.add( 12 ); queue.add( 27 ); queue.add( 67 ); // Print queue before drainTo operation System.out.println( "Before drainTo Operation" ); System.out.println( "queue = " + queue); // Create Collection object to // transfer elements ArrayList list = new ArrayList(); // Call drainTo method of queue // and pass collection as parameter. queue.drainTo(list); // Print queue before drainTo operation System.out.println( "After drainTo Operation" ); System.out.println( "queue = " + queue); System.out.println( "collection = " + list); } } |
Before drainTo Operationqueue = [23, 32, 45, 12, 27, 67]After drainTo Operationqueue = []collection = [23, 32, 45, 12, 27, 67]
2.最新进展 德兰托( 集合c,int maxElements ) 方法用于 将固定数量的元素转移到集合中。 传输指定的元素号后,ArrayBlocking队列仅包含未传输到集合的元素。此函数与上述函数相同,但有一些限制。
语法:
public int drainTo(Collection c, int maxElements)
参数: 该方法接受两个参数:
- C –这是指转移元素的集合。
- maxElements–这是整数类型,是指要传输到集合的最大元素数。
返回值: 排出的元素数量。
例外情况:
- 不支持操作异常 –如果指定集合不支持添加元素
- 类别例外 –如果此队列的某个元素的类阻止将其添加到指定集合
- 空指针异常 –如果指定的集合为空
- 非法数据异常 –如果指定的集合是此队列,或者此队列元素的某些属性阻止将其添加到指定集合中
下面的程序演示了ArrayBlockingQueue的drainTo(Collection c,int maxElements)方法的工作原理。
JAVA
// Program Demonstrate drainTo(Collection c, int maxElements) // method of ArrayBlockingQueue import java.util.ArrayList; import java.util.concurrent.ArrayBlockingQueue; public class GFG { public static void main(String[] args) { // Define capacity of ArrayBlockingQueue int capacity = 10 ; // Create object of ArrayBlockingQueue ArrayBlockingQueue queue = new ArrayBlockingQueue(capacity); // Add elements to ArrayBlockingQueue queue.add( "aman" ); queue.add( "sudhir" ); queue.add( "harsh" ); queue.add( "rahul" ); queue.add( "raunak" ); // Print queue before drainTo operation System.out.println( "Before drainTo Operation" ); System.out.println( "queue = " + queue); // Transfer elements from ArrayBlockingQueue; ArrayList list = new ArrayList(); // Define no of elements to be transferred int maxElements = 3 ; // Call drainTo method of queue and pass // the collection as parameter. queue.drainTo(list, maxElements); // Print queue before drainTo operation System.out.println( "After drainTo Operation" ); System.out.println( "queue = " + queue); System.out.println( "collection = " + list); } } |
Before drainTo Operationqueue = [aman, sudhir, harsh, rahul, raunak]After drainTo Operationqueue = [rahul, raunak]collection = [aman, sudhir, harsh]