📅  最后修改于: 2023-12-03 14:42:46.923000             🧑  作者: Mango
DelayQueue是Java中一个无界队列,可以保存实现了Delayed接口的元素,并且在指定延迟时间之后才会被取出。在DelayQueue中,元素按照延迟时间的先后顺序排列。
toArray()方法可以将DelayQueue转换为数组,以便在其他的数据结构中使用。该方法的语法如下:
public Object[] toArray()
该方法返回一个包含DelayQueue中所有元素的数组。
下面的示例展示了如何使用toArray()方法将DelayQueue转换为数组。
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
public class Demo {
public static void main(String[] args) {
DelayQueue<DelayedElement> delayQueue = new DelayQueue<>();
delayQueue.add(new DelayedElement("element1", 2, TimeUnit.SECONDS));
delayQueue.add(new DelayedElement("element2", 4, TimeUnit.SECONDS));
delayQueue.add(new DelayedElement("element3", 3, TimeUnit.SECONDS));
DelayedElement[] elements = delayQueue.toArray(new DelayedElement[delayQueue.size()]);
for (DelayedElement element : elements) {
System.out.println(element);
}
}
}
class DelayedElement implements Delayed {
private String name;
private long delayTime;
private TimeUnit timeUnit;
private long startTime;
public DelayedElement(String name, long delayTime, TimeUnit timeUnit) {
this.name = name;
this.delayTime = delayTime;
this.timeUnit = timeUnit;
this.startTime = System.currentTimeMillis() + timeUnit.toMillis(delayTime);
}
@Override
public long getDelay(TimeUnit unit) {
long diff = startTime - System.currentTimeMillis();
return unit.convert(diff, TimeUnit.MILLISECONDS);
}
@Override
public int compareTo(Delayed o) {
if (this.startTime < ((DelayedElement) o).startTime) {
return -1;
} else if (this.startTime > ((DelayedElement) o).startTime) {
return 1;
}
return 0;
}
@Override
public String toString() {
return "DelayedElement{" +
"name='" + name + '\'' +
", delayTime=" + delayTime +
", timeUnit=" + timeUnit +
", startTime=" + startTime +
'}';
}
}
输出结果:
DelayedElement{name='element1', delayTime=2, timeUnit=SECONDS, startTime=1625147948076}
DelayedElement{name='element2', delayTime=4, timeUnit=SECONDS, startTime=1625147949976}
DelayedElement{name='element3', delayTime=3, timeUnit=SECONDS, startTime=1625147948989}
本示例中,我们创建了一个DelayQueue,将三个DelayElement元素添加到其中。然后我们使用toArray()方法将DelayQueue转化为一个包含所有元素的数组。最后,我们循环遍历该数组并输出每个元素的信息。
通过上述示例,我们可以清楚地了解toArray()方法的作用以及如何使用它将DelayQueue转换为数组。此外,我们还可以通过该方法在其他数据结构中使用DelayQueue中的数据。