Java中LinkedTransferQueue的drainTo()方法

Java中LinkedTransferQueue的drainTo()方法

drainTo(Collection c)

java.util.concurrent.LinkedTransferQueue类的 drainTo(Collection c) 方法是Java中的一个内置函数,它删除此队列中存在的所有元素并将它们添加到提供的 collection 中。这比重复轮询这个队列更有效率。

当从队列中试图向集合 c 中添加元素时,有可能会遇到失败,并且由于这种失败,在抛出关联异常时元素会在两个集合之间分配。如果尝试将队列的drainTo()转移到队列本身,则会抛出 IllegalArgumentException 异常。如果在操作正在进行时修改了指定的集合,则此操作的行为未定义。因此,对于使用这种方法,需要注意这种类型的情况以克服异常。

语法:

public int drainTo(Collection c)

参数: 该函数接受一个强制参数c,即要转移元素的集合。

返回值: 该函数返回从队列到集合中排出的元素数量。

异常: 此方法会抛出以下异常:

  • NullPointerException - 如果集合为 null
  • IllegalArgumentException - 如果方法的参数使其无法添加到指定的集合

以下程序演示了java.util.concurrent.LinkedTransferQueue.drainTo()方法的使用:

程序1: 从队列中排出所有元素到指定的 collection。

// Java Program Demonstrate drainTo()
// method of LinkedTransferQueue
  
import java.util.*;
import java.util.concurrent.LinkedTransferQueue;
  
class GFG {
    public static void main(String[] args)
    {
  
        // Initializing the List
        List<Integer> list = new ArrayList<Integer>();
  
        // Initializing the queue
        LinkedTransferQueue<Integer>
            queue = new LinkedTransferQueue<Integer>();
  
        // Adding elements to this queue
        for (int i = 10; i <= 15; i++)
            queue.add(i);
  
        // Printing the elements of the queue
        System.out.println("Elements in the queue = "
                           + queue);
  
        // drainTo() method removes all available elements
        // from this queue and adds them to the list
        queue.drainTo(list);
  
        // Printing the elements of the queue after drainTo()
        System.out.println("Elements left in the queue :"
                           + queue);
  
        // Printing the elements of the list
        System.out.println("Elements drained in the list :"
                           + list);
    }
}
Elements in the queue = [10, 11, 12, 13, 14, 15]
Elements left in the queue :[]
Elements drained in the list :[10, 11, 12, 13, 14, 15]

程序2: 演示灌注(NullPointerException)。

// Java程序演示了LinkedTransferQueue类中的drainTo()方法
  
import java.util.ArrayList;
import java.util.concurrent.LinkedTransferQueue;
  
class GFG {
    public static void main(String[] args)
        throws InterruptedException
    {
  
        // 初始化队列
        LinkedTransferQueue<Integer>
            queue = new LinkedTransferQueue<Integer>();
  
        // 将元素添加到队列中
        queue.put(10);
        queue.put(20);
        queue.put(30);
  
        // 创建一个空的集合
        ArrayList<Integer> add = null;
  
        // 尝试将空队列转移到集合中
        try {
            // 由于add列表为空,这将抛出异常
            queue.drainTo(add);
        }
        catch (Exception e) {
            System.out.println("异常: " + e);
        }
    }
}
异常: java.lang.NullPointerException

drainTo(Collection c, int maxElements)

java.util.concurrent.LinkedTransferQueue 中的 drainTo(Collection c, int maxElements) 方法是Java中的一种内置函数,用于将指定数量的元素传输到传递给方法的集合中。传输元素后,LinkedTransferQueue 将只剩下那些未传输到集合中的元素。此函数与上面的函数相同,具有一些限制来传输固定数量的元素。

语法:

public int drainTo(Collection c,
          int maxElements)

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

  • c – 表示从LinkedTransferQueue中传输元素的集合。
  • maxElements – 这是整数类型,并且指的是要传输到集合中的最大元素数。

返回值: 该函数返回从队列中传到集合的元素数量。

异常: 该方法会抛出以下异常:

* **NullPointerException** \- 如果集合为空。 
* **IllegalArgumentException** \- 如果该方法的参数阻止将它添加到指定集合中。 

程序1: 从队列中最多提取给定数量的可用元素到指定集合的程序。

// Java程序演示LinkedTransferQueue的drainTo()方法
  
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.LinkedTransferQueue;
  
class GFG {
    public static void main(String[] args)
    {
  
        // 初始化列表
        List<Integer> list = new ArrayList<Integer>();
  
        // 初始化队列
        LinkedTransferQueue<Integer>
            queue = new LinkedTransferQueue<Integer>();
  
        // 将元素添加到该队列中
        for (int i = 1; i <= 10; i++)
            queue.add(i);
  
        // 打印队列元素
        System.out.println("队列中的元素 = " + queue);
  
        // drainTo()方法最多移除指定数量的可用元素
        // 从队列中取出,并将它们加到列表中。
        queue.drainTo(list, 5);
  
        // 输出drainTo()方法后队列中的元素
        System.out.println("队列中剩余的元素:" + queue);
  
        // 打印列表中的元素
        System.out.println("列表中抽出的元素:" + list);
    }
}

输出:

队列中的元素 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
队列中剩余的元素:[6, 7, 8, 9, 10]
列表中抽出的元素:[1, 2, 3, 4, 5]

程序2: 演示drainTo()中NullPointerException的程序。

// Java程序演示LinkedTransferQueue的drainTo()方法
  
import java.util.ArrayList;
import java.util.concurrent.LinkedTransferQueue;
  
class GFG {
    public static void main(String[] args)
        throws InterruptedException
    {
  
        // 初始化队列
        LinkedTransferQueue<Integer> queue
            = new LinkedTransferQueue<Integer>();
  
        // 添加元素到队列中
        queue.put(10);
        queue.put(20);
        queue.put(30);
  
        // 创建一个值为空的集合。
        ArrayList<Integer> add = null;
  
        // 尝试从null队列中取元素到集合中
        try {
            // 这将抛出异常,因为add列表为空值
            queue.drainTo(add, 2);
        }
        catch (Exception e) {
            System.out.println("异常:" + e);
        }
    }
}

输出:

异常: java.lang.NullPointerException

参考:

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程