与Java中的Arraylist不重复

1 java arraylist

好吧所以我是ArrayList的新手,我想做的是制作一个程序,从一副54张卡中获得3张随机卡,没有任何重复.我不知道在我的if循环中放什么.请帮忙

import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.util.ArrayList;

public class card_ran1 extends JFrame
{
    public card_ran1()
    {
        ArrayList<Integer> Ran = new ArrayList<Integer>();
        setLayout(new GridLayout(1,4,5,5));
        Random random = new Random();
        int i = random.nextInt(54) + 1 ;
        int n = random.nextInt(54) + 1 ;
        int m = random.nextInt(54) + 1 ;
        Ran.add(i);

        if (Ran.contains(n))
        {
            //what should go here
        }
        if (Ran.contains(m)) 
        {
            //what should go here
        }
        add(new JLabel(new ImageIcon("card/" + Ran.get(0) + ".png")));
        add(new JLabel(new ImageIcon("card/" + Ran.get(1) + ".png")));
        add(new JLabel(new ImageIcon("card/" + Ran.get(2) + ".png")));
    }

    public static void main(String[] args) 
    {
        card_ran1 frame = new card_ran1();
        frame.setTitle("Random Cards");
        frame.setSize(600,300);
        frame.setLocationRelativeTo( null );
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.setVisible( true );
    }
}
Run Code Online (Sandbox Code Playgroud)

Boh*_*ian 8

如果值是唯一的,请使用a Set,而不是a List.

Set<Integer> set = new LinkedHashSet<Integer>(); // order is preserved
Run Code Online (Sandbox Code Playgroud)

使用循环来获得3个不同的值:

while (set.size() < 3)
    set.add(random.nextInt(54) + 1);
Run Code Online (Sandbox Code Playgroud)

如果您确实需要a List,请使用复制构造函数:

List<Integer> list = new ArrayList<Integer>(set);
Run Code Online (Sandbox Code Playgroud)

整个过程只需几行代码即可完成.