📜  java中的字符串删除重复方法(1)

📅  最后修改于: 2023-12-03 14:42:56.880000             🧑  作者: Mango

Java中的字符串删除重复方法

在开发中,我们常常需要对字符串进行去重操作。虽然Java中提供了多种方法来完成该操作,但是不同的方法也有不同的适用场景。本文将介绍几种Java中的字符串删除重复方法,并对其优缺点进行分析。

方法一:使用LinkedHashSet去重

LinkedHashSet是一种有序的Set集合,它内部使用链表来维护插入顺序。通过该特性,我们可以将字符串中的重复元素去重,并保留原先的顺序。具体代码如下:

public static String removeDuplicates(String str){
    LinkedHashSet<Character> set = new LinkedHashSet<>();
    for(int i = 0; i < str.length(); i++){
        set.add(str.charAt(i));
    }
    StringBuilder sb = new StringBuilder();
    for(Character c : set){
        sb.append(c);
    }
    return sb.toString();
}

该方法的时间复杂度为O(n),空间复杂度也为O(n)。

方法二:使用HashSet去重

HashSet是一种无序的Set集合,它内部使用哈希表来维护元素的唯一性。因此,我们可以使用HashSet来实现字符串去重。具体代码如下:

public static String removeDuplicates(String str){
    HashSet<Character> set = new HashSet<>();
    for(int i = 0; i < str.length(); i++){
        set.add(str.charAt(i));
    }
    StringBuilder sb = new StringBuilder();
    for(Character c : set){
        sb.append(c);
    }
    return sb.toString();
}

该方法的时间复杂度为O(n),空间复杂度也为O(n)。需要注意的是,由于HashSet是无序的,因此去重后的字符串可能与原先的顺序不同。

方法三:使用indexOf方法去重

我们可以通过遍历字符串中的每一个字符,并使用indexOf方法找到其第一次出现的位置来判断是否为重复元素。具体代码如下:

public static String removeDuplicates(String str){
    StringBuilder sb = new StringBuilder();
    for(int i = 0; i < str.length(); i++){
        char c = str.charAt(i);
        if(sb.indexOf(String.valueOf(c)) == -1){
            sb.append(c);
        }
    }
    return sb.toString();
}

该方法的时间复杂度为O(n^2),空间复杂度为O(n)。

总结

在实际开发中,我们应该根据实际情况选择合适的方法来进行字符串去重操作。如果需要保留原有顺序,可以使用LinkedHashSet;如果不需要顺序,则可以使用HashSet;如果对时间复杂度要求较高,则可以使用indexOf方法。