import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.TreeSet;
public class Test {
//方法1 效率最高但不能保证顺序
public static String fun1(String str){
TreeSet<Character> treeSet = new TreeSet<Character>();
for (int i = 0; i < str.length(); i++) {
treeSet.add(str.charAt(i));
}
StringBuffer sb = new StringBuffer();
for (Iterator iterator = treeSet.iterator(); iterator.hasNext();) {
sb.append(iterator.next());
}
return sb.toString();
}
//方法2 效率和方法3 差不多
public static String fun2(String str){
char[] array = str.toCharArray();
List<Character> list = new ArrayList<Character>();
for (int i = 0; i < array.length; i++) {
if (!list.contains(array[i])) {
list.add(array[i]);
}
}
//将去重后的list重新转为字符串
String strResult = "";
for (int i = 0; i < list.size(); i++) {
strResult += list.get(i);
}
return strResult;
}
//方法3
public static String fun3(String str){
StringBuffer sb = new StringBuffer();
char[] array = str.toCharArray();
List<Character> list = new ArrayList<Character>();
for (int i = 0; i < array.length; i++) {
if (!list.contains(array[i])) {
list.add(array[i]);
sb.append(array[i]);
}
}
return sb.toString();
}
//方法4 太慢了 list删除元素那块效率很低
public static String fun4(String str){
char[] array = str.toCharArray();
List<Character> list = new ArrayList<Character>();
for (Character arr : array) {
list.add(arr);
}
for (int i = 0; i < list.size(); i++) {
for (int j = list.size() - 1; j > i; j--) {
if (list.get(j) == list.get(i)) {
list.remove(j);
}
}
}
//将去重后的list重新转为字符串
String strResult = "";
for (int i = 0; i < list.size(); i++) {
strResult += list.get(i);
}
return strResult;
}
//方法5 太慢了,应该是StringBuffer的删除元素那块效率很低
public static String fun5(String str){
StringBuffer sb = new StringBuffer(str);
List<Character> list = new ArrayList<Character>();
int j = 0;
for (int i = 0; i < str.length(); i++) {
if (list.contains(str.charAt(i))) {
sb.deleteCharAt(i-j);
j++;
}else{
list.add(str.charAt(i));
}
}
return sb.toString();
}
public static void main(String[] args) {
String str = newString();
long a = System.currentTimeMillis();
System.out.println(fun1(str)); // 47ms
long b = System.currentTimeMillis();
System.out.println(b-a);
long d = System.currentTimeMillis();
System.out.println(fun2(str)); // 95ms
long e = System.currentTimeMillis();
System.out.println(e-d);
long f = System.currentTimeMillis();
System.out.println(fun3(str)); //90ms
long g = System.currentTimeMillis();
System.out.println(g-f);
long h = System.currentTimeMillis();
System.out.println(fun4(str)); //37014ms
long i= System.currentTimeMillis();
System.out.println(i-h);
long j = System.currentTimeMillis();
System.out.println(fun5(str)); // 33310ms
long k = System.currentTimeMillis();
System.out.println(k-j);
}
//生成字符串
private static String newString() {
char[] arr = {'a','b','c','d','e','f','g','h','i','g','k','l','m'
,'n','o','p','q','r','s','t','u','v','w','x','y','z','1'};
Random rd = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 1000000; i++) {
int n = rd.nextInt(27);
sb.append(arr[n]);
}
String str = sb.toString();
return str;
}
}