Java中的ArrayBlockingQueue drainTo()方法

ArrayBlockingQueue 是一个有界的阻塞队列,它存储由数组在内部支持的元素。

null
  • 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]

参考: https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ArrayBlockingQueue.html#drainTo(java.util.Collection)

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享