Java中的PriorityBlockingQueue drainTo()方法

这个 德兰托(收藏) 方法 优先阻塞队列 从此LinkedBlock队列中删除所有可用元素,并将它们添加到作为参数传递的给定集合中。

null

德兰托(系列col)

这个 德兰托(系列col) PriorityBlockingQueue方法从该队列中移除所有元素,并将它们添加到给定的集合列中。这是一种比重复轮询该队列更有效的方法。 在尝试从队列向集合c添加元素时,也可能会遇到失败,并且由于该失败,当引发关联的异常时,元素会分布在两个集合之间。如果试图将队列拖入()以对其自身进行排队,则会引发IllegalArgumentException。如果在操作进行期间修改了指定的集合,则此操作的行为未定义。因此,使用这些方法时,需要注意这种情况,以克服例外情况。 语法:

public int drainTo(Collection<? super E> col)

参数: 此方法接受一个参数 上校 表示从PriorityBlockingQueue传输元素的集合。 返回值: 此方法返回从队列中排入集合的元素数。 例外情况: 此方法引发以下异常:

  • 不支持操作异常 –如果集合无法添加元素。
  • 类别例外 –如果元素类停止向集合添加元素的方法。
  • 空指针异常 –如果集合为空
  • 非法数据异常 –如果方法的参数阻止将其添加到指定集合中

下面的程序演示了PriorityBlockingQueue类的drainTo()方法: 例1: 程序演示PriorityBlockingQueue上的drainTo()方法,该方法包含一个数组列表中的数字列表。

JAVA

// Java Program Demonstrate drainTo()
// method of PriorityBlockingQueue
import java.util.concurrent.PriorityBlockingQueue;
import java.util.*;
public class GFG {
public static void main(String[] args)
{
// define capacity of PriorityBlockingQueue
int capacityOfQueue = 5 ;
// create object of PriorityBlockingQueue
PriorityBlockingQueue<Integer> PrioQueue
= new PriorityBlockingQueue<Integer>(capacityOfQueue);
// Add numbers to PriorityBlockingQueue
PrioQueue.put( 7855642 );
PrioQueue.put( 35658786 );
PrioQueue.put( 5278367 );
PrioQueue.put( 74381793 );
PrioQueue.put( 76487590 );
PrioQueue.put( 87625142 );
// create a ArrayList of Integers
ArrayList<Integer> list = new ArrayList<Integer>();
// drain all elements of PriorityBlockingQueue to ArrayList
// Using drainTo() method
int noOfElementDrained = PrioQueue.drainTo(list);
// print details
System.out.println("No of elements drained :" + noOfElementDrained);
System.out.println("ArrayList Contains element");
for ( int i : list)
System.out.println(i);
}
}


输出:

No of elements drained :6ArrayList Contains element5278367785564235658786743817937648759087625142

例2: 下面的程序演示drainTo()方法引发的异常。

JAVA

// Java Program Demonstrate drainTo()
// method of PriorityBlockingQueue
import java.util.concurrent.PriorityBlockingQueue;
import java.util.*;
public class GFG {
public static void main(String[] args)
{
// define capacity of PriorityBlockingQueue
int capacityOfQueue = 5 ;
// create object of PriorityBlockingQueue which contains
// name of students
PriorityBlockingQueue<String> names
= new PriorityBlockingQueue<String>(capacityOfQueue);
// Add names of students of girls college
names.add("Joyita");
names.add("Priyanka");
names.add("Joydeep");
// create a collection with null
ArrayList<String> collection = null ;
// try to drain to collection equals to null
try {
names.drainTo(collection);
}
catch (Exception e) {
System.out.println("Exception Thrown: " + e);
}
}
}


输出:

Exception Thrown: java.lang.NullPointerException

drainTo(系列col,int maxElements)

这个 drainTo(系列col,int maxElements) 用于将固定数量的元素作为整数在drainTo()中传递给集合,集合也作为参数传递给方法。传输元素后,PriorityBlockingQueue只包含未传输到集合的元素。该函数与上述函数相同,但在传递固定数量的元素时存在一些限制。 语法:

public int drainTo(Collection<? super E> col, int maxElements)

参数: 该方法接受两个参数:

  • 上校 –它表示从PriorityBlockingQueue传输元素的集合。
  • 最大元素 –这是整数类型,是指要传输到集合的最大元素数。

返回值: 该方法返回 排出的元素数 从队列中收集。 例外情况: 此方法引发以下异常:

  • 不支持操作异常 –如果集合无法添加元素。
  • 类别例外 -if元素类停止向集合添加元素的方法。
  • 空指针异常 –如果集合为空
  • 非法数据异常 –如果方法的参数阻止将其添加到指定集合中

下面的程序演示了PriorityBlockingQueue类的drainTo(Collectioncol,int maxElements)方法: 例1: 在PriorityBlockingQueue上演示drainTo(Collectionc,int maxElements)方法的程序,它包含一个数组列表的数字列表,我们只传输3个元素。

JAVA

// Java Program Demonstrate drainTo()
// method of PriorityBlockingQueue
import java.util.concurrent.PriorityBlockingQueue;
import java.util.*;
public class GFG {
public static void main(String[] args)
{
// define capacity of PriorityBlockingQueue
int capacityOfQueue = 5 ;
// create object of PriorityBlockingQueue
PriorityBlockingQueue<Integer> PrioQueue
= new PriorityBlockingQueue<Integer>(capacityOfQueue);
// Add numbers to PriorityBlockingQueue
PrioQueue.put( 7855642 );
PrioQueue.put( 35658786 );
PrioQueue.put( 5278367 );
PrioQueue.put( 74381793 );
PrioQueue.put( 76487590 );
PrioQueue.put( 87625142 );
// create maxElement variable
// Contains no of elements we want to transfer
int maxElement = 3 ;
// create a ArrayList of Integers
ArrayList<Integer> list = new ArrayList<Integer>();
// drain all elements of PriorityBlockingQueue to ArrayList
// Using drainTo() method
int noOfElementDrained = PrioQueue.drainTo(list, maxElement);
// print details
System.out.println("ArrayList Contains element");
for ( int i : list)
System.out.println(i);
}
}


输出:

ArrayList Contains element5278367785564235658786

例2: 下面的程序演示了名字列表上的drainTo(Collectionc,int maxElements)方法,并将两个名字转移到一个arraylist中,然后打印列表。

JAVA

// Java Program Demonstrate drainTo()
// method of PriorityBlockingQueue
import java.util.concurrent.PriorityBlockingQueue;
import java.util.*;
public class GFG {
public static void main(String[] args)
{
// define capacity of PriorityBlockingQueue
int capacityOfQueue = 5 ;
// create object of PriorityBlockingQueue which contains
// name of students
PriorityBlockingQueue<String> names
= new PriorityBlockingQueue<String>(capacityOfQueue);
// Add names of students of girls college
names.add("Joyita");
names.add("Priyanka");
names.add("Ravi");
names.add("Suraj");
// create maxElement variable
// Contains no of elements we want to transfer
// here we want to transfer only two names
int maxElement = 2 ;
// create a collection with null
ArrayList<String> collection = new ArrayList<String>();
// drain all elements of PriorityBlockingQueue to ArrayList
// Using drainTo() method
int noOfElementDrained = names.drainTo(collection, maxElement);
// print details
System.out.println("ArrayList Contains element");
int i = 0 ;
for (String str : collection) {
System.out.println("Element " + i + " : " + str);
i++;
}
}
}


输出:

ArrayList Contains elementElement 0 : JoyitaElement 1 : Priyanka

参考:

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