import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import java.util.ListIterator;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
/**
* 创建一个包含15个随机整数(0~9)的列表,然后去掉其中的所有重复数字。
* @author 王兰礼
* @date 2009/11/11
*/
public class RemoveDuplicates {
static JButton b1;
static JButton b2;
static JTextField jtf1;
static JTextField jtf2;
static final int NUM = 15;
static int[]in=new int[NUM];
private static boolean generated=false;
public static void main(String[] args) {
generateFrame();
}
public static void generateFrame() {
JFrame frame = new JFrame("Removing Duplicates");
frame.setLayout(new GridLayout(3, 2));
b1 = new JButton("Generate List");
b2 = new JButton("Remove Duplicates");
JLabel jl=new JLabel("Designed By Wanglanli Date:2009/11/11");
jtf1 = new JTextField();
jtf2 = new JTextField();
jtf1.setForeground(Color.red);
jtf1.setFont(new Font(null, 1, 16));
jtf2.setForeground(Color.blue);
jtf2.setFont(new Font(null, 1, 16));
frame.add(b1);
frame.add(jtf1);
frame.add(b2);
frame.add(jtf2);
frame.add(jl);
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
in=generateRandom();
StringBuffer sb = new StringBuffer();
sb.append("[ ");
for (int i = 0; i < in.length- 1; i++) {
sb.append(in[i] + ",");
}
sb.append(in[in.length - 1] + " ]");
jtf1.setText(sb.toString());
}
});
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
removeDuplicates();
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 120);
frame.setLocation(200, 200);
frame.setResizable(false);
frame.setVisible(true);
}
/**
* 产生15个随机数
* @return
*/
public static int[] generateRandom() {
int[] randNum = new int[NUM];
Random r = new Random();
for (int i = 0; i < NUM; i++) {
randNum[i] = r.nextInt(10);
}
generated=true;
return randNum;
}
/**
* 用一个迭代器从前往后扫描列表。如果后面的有和目标元素(target)相等的,就删除这个重复的元素。
* 同时将count加一。对于每次外循环,内循环都执行一次,删除与目标元素相同的元素。之后,目标元素变成下一次迭代列表
* 的第c个元素,因为前c-1个元素已经验证完毕。
* @param count 代表需要循环的次数。当删除一个重复元素时,count加一。迭代一次,count也加一。这样能保证有效外循环次数。
*/
public static void removeDuplicates() {
if(generated==false)
{
JOptionPane.showMessageDialog(null, "Please First generateData");
return;
}
LinkedList<Integer> alist=new LinkedList<Integer>();
for(int i=0;i<in.length;i++)
alist.add(in[i]);
ListIterator iter = alist.listIterator();
Integer target = null;
//控制外循环次数
int count=0;
//迭代次数,下一个目标元素为列表中的第c个,因为前c-1次迭代已经遍历完了前c-1个元素。
int c=0;
while(count<NUM){
for(int i=0;i<=c;i++)
target=(Integer)iter.next();
while (iter.hasNext()) {
Integer i = (Integer) iter.next();
if (target.equals(i)) {
iter.remove();
count++;
}
}
//将指针指向迭代完后的新列表
iter=alist.listIterator();
count++;
c++;
}
jtf2.setText(alist.toString());
}
}