Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我怎样洗牌?_Java_Shuffle_Deque - Fatal编程技术网

Java 我怎样洗牌?

Java 我怎样洗牌?,java,shuffle,deque,Java,Shuffle,Deque,这是我的代码: import java.util.ArrayDeque; import java.util.Collections; import java.util.Deque; import java.util.List; public class ArrayDequeDemo { public static void main(String[] args) { // create an empty array deque with an initial capacit

这是我的代码:

import java.util.ArrayDeque;
import java.util.Collections;
import java.util.Deque;
import java.util.List;

public class ArrayDequeDemo {
   public static void main(String[] args) {

      // create an empty array deque with an initial capacity
      Deque<Integer> deque = new ArrayDeque<Integer>(8);

      // use add() method to add elements in the deque
      deque.add(15);
      deque.add(30);
      deque.add(20);
      deque.add(18);        

      // let us print all the elements available in deque
      for (Integer number : deque) {
         System.out.println("Number = " + number);
      }

      //Collections.shuffle((List<?>) deque);
      // getFirst() will retrieve element at first(head) position
      int retval = deque.getFirst();
      System.out.println("Retrieved Element is = " + retval);
   }
}
import java.util.ArrayDeque;
导入java.util.Collections;
导入java.util.Deque;
导入java.util.List;
公共类ArrayDequeDemo{
公共静态void main(字符串[]args){
//创建具有初始容量的空数组deque
Deque Deque=新的ArrayDeque(8);
//使用add()方法在deque中添加元素
增加(15);
增加(30);
增加(20);
增加(18);
//让我们打印deque中可用的所有元素
for(整数:deque){
System.out.println(“Number=“+Number”);
}
//集合。洗牌((列表)deque);
//getFirst()将在第一个(头)位置检索元素
int retval=deque.getFirst();
System.out.println(“检索到的元素为=“+retval”);
}
}
我知道如何洗牌
列表
,但如何使用
集合
洗牌一个数据?
请用代码回复,因为我还不完全习惯Java术语/理论,我还在学习。

您不能使用
Java.util.Collections
洗牌
Deque
;它仅适用于实现
列表的集合。您可以编写自己的随机播放例程,也可以先创建一个
列表
,对其进行随机播放,然后将结果复制到
Deque

public static void main(String[] args) {

  // create an empty array deque with an initial capacity
  List<Integer> list = new ArrayList<Integer>(8);

  // use add() method to add elements in the deque
  list.add(15);
  list.add(30);
  list.add(20);
  list.add(18);        

  // let us print all the elements available in deque
  for (Integer number : list) {
     System.out.println("Number = " + number);
  }

  Collections.shuffle(list);
  Deque<Integer> deque = new ArrayDeque<Integer>(list);
  // getFirst() will retrieve element at first(head) position
  int retval = deque.getFirst();
  System.out.println("Retrieved Element is = " + retval);
}
publicstaticvoidmain(字符串[]args){
//创建具有初始容量的空数组deque
列表=新的ArrayList(8);
//使用add()方法在deque中添加元素
增加(15);
增加(30);
增加(20);
增加(18);
//让我们打印deque中可用的所有元素
用于(整数:列表){
System.out.println(“Number=“+Number”);
}
集合。洗牌(列表);
Deque Deque=新的ARRAYDEFUE(列表);
//getFirst()将在第一个(头)位置检索元素
int retval=deque.getFirst();
System.out.println(“检索到的元素为=“+retval”);
}
当然,编写自己的洗牌例程的问题是,
Deque
接口不提供移动元素的方法。

集合。洗牌(List)只接受List,因此为了洗牌Deque,需要使用Deque的LinkedList实现。LinkedList实现了Deque和List接口。看

publicstaticvoidmain(字符串[]args){
LinkedList=新建LinkedList();
//使用add()方法在deque中添加元素
增加(15);
增加(30);
增加(20);
增加(18);
//让我们打印deque中可用的所有元素
用于(整数:列表){
System.out.println(“Number=“+Number”);
}
集合。洗牌(列表);
int retval=list.getFirst();
System.out.println(“检索到的元素为=“+retval”);
}

谢谢!我会选择这个作为答案:)快速提问,阅读其他答案,我看到:
注意,Deque只是一个接口,要使用一个也实现了List的类,然后你就可以使用Collections。Shuffle(List)
这就是你上面所做的吗?@Ryan-没错。如果您想要实现
List
Deque
的单个具体集合类型,可以使用
LinkedList
。请注意,基于数组的集合对随机元素的访问时间为O(1),而
LinkedList
为O(n)。(洗牌
ArrayList
比洗牌
LinkedList
更快)但是,对于直接迭代或在开始和/或结束时重复操作,
LinkedList
的性能与基于数组的集合一样好(有时更好)。通常“编写自己的”并没有多大意义,除非它是绝对性能关键的。洗牌的标准答案可能是在ArrayList中执行(因为洗牌需要随机访问),然后将其复制回LinkedList/Deque。出于这个原因,Collections.shuffle()将非随机访问列表随机排列在一个数组中。谢谢,我将查看您发布的链接。我已经知道如何使用列表,但deque部分让我感到困惑+1'ed。
public static void main(String[] args) {

    LinkedList<Integer> list = new LinkedList<Integer>();

    // use add() method to add elements in the deque
    list.add(15);
    list.add(30);
    list.add(20);
    list.add(18);

    // let us print all the elements available in deque
    for (Integer number : list) {
        System.out.println("Number = " + number);
    }

    Collections.shuffle(list);
    int retval = list.getFirst();
    System.out.println("Retrieved Element is = " + retval);
}