【问题标题】:removing the duplicate and sorting a string array删除重复项并对字符串数组进行排序
【发布时间】:2014-04-29 06:52:18
【问题描述】:

我正在尝试删除重复项并对字符串数组进行排序,但我无法做到。我不明白我做错了什么。请检查代码。

String [] s = {"a", "y", "x","a","d", "y","m"};


Set st = new HashSet();
st.add(s);

Array.sort(st);

当我这样做时,我收到了这个错误。

Arrays 类型中的方法 sort(int[]) 不适用于参数 (Set)。

根据我的感觉,我们应该首先使用 Set 接口删除重复项,然后我们必须对它们进行排序。但我什至无法打印 st 引用变量也([[Ljava.lang.String;@1d9dc39])得到这个错误。

请帮帮我。

【问题讨论】:

  • TreeSet 是你所需要的。
  • @JasonSperske 但我在线程“main”java.lang.ClassCastException 中得到以下treeset.Exception 异常:[Ljava.lang.String;不能在 java.util.TreeMap.compare(TreeMap.java:1188) 在 java.util.TreeMap.put(TreeMap.java:531) 在 java.util.TreeSet.add(TreeSet. java:255) 在 com.ani.sample.Mango.main(Mango.java:70)
  • 使用st.add(s); 您正在将 array 添加到集合中。您必须将数组的 元素 添加到集合中。您可以使用set.addAll(Arrays.asList(s))for 循环来执行此操作。如果你使用泛型,这些问题是可以避免的......
  • 我添加了一个快速实现,但老实说这里有很多很棒的答案

标签: java arrays sorting data-structures collections


【解决方案1】:

您不能使用 Array.sort() 对集合进行排序。正如 gravitas 所提到的,这是因为集合没有顺序。它只是一堆物体。

您必须将集合中的元素添加到数组或其他有顺序的东西中,然后对它们进行排序

或者你可以使用一个数组列表,然后使用 Collections.sort()

类似

ArrayList<String> list = new ArrayList<>();
list.addAll(set);

Collections.sort(list);

这将根据列表中包含的对象的自然顺序对列表进行排序。

【讨论】:

  • 这是有道理的,因为集合中没有顺序这样的东西。然而,顺序的概念存在于数组中。
  • @gravitas:我收到异常:线程“main”中的异常 java.lang.ClassCastException:[Ljava.lang.String;无法在 java.util.TreeMap.compare(TreeMap.java:1188) 在 java.util.TreeMap.put(TreeMap.java:531) 在 java.util.TreeSet.add(TreeSet. java:255) 在 com.ani.sample.Mango.main(Mango.java:71)
【解决方案2】:
   String [] s = {"a", "y", "x","a","d", "y","m"};
     Set st = new TreeSet();
     st.addAll(Arrays.asList(s));

【讨论】:

  • prints:[a, d, m, x, y],如果需要,可以使用 st.toArray() 将其转换回数组。
【解决方案3】:
public static String sortAndRemoveDuplicates(String s) {
    return List.of(s.split("")).stream()
        .sorted()
        .distinct()
        .collect(Collectors.joining());
}

【讨论】:

    【解决方案4】:
    List<String> sortedUnique = 
        new ArrayList<String>(new TreeSet<String>(Arrays.asList(s)));
    

    【讨论】:

      【解决方案5】:
        String [] s = {"a", "y", "x","a","d", "y","m"};
           List<String> list = Arrays.asList(s);
           Set<String> set = new HashSet<>(list);
           list = new ArrayList<>(set);
           Collections.sort(list);
           //Iterate the list
      

      【讨论】:

        【解决方案6】:

        嗨,你可以使用 TreeSet

        String [] s = {"a", "y", "x","a","d", "y","m"};
        
        Set<String> newSet= new TreeSet<String>(Arrays.asList(s));
        

        【讨论】:

          【解决方案7】:

          这是一个带有输出的快速 TreeSet 示例(我不知道将其添加到哪个答案,但请随意复制它,因为这里的很多人都在告诉 OP 做同样的基本事情)(这里它被清理了一点)。

          import java.util.Arrays;
          import java.util.TreeSet;
          
          public class SO {
            public static void main(String[] args) {
              String[] s = {"a", "y", "x","a","d", "y","m"};
              System.out.println(Arrays.toString(s));
              //[a, y, x, a, d, y, m]
              System.out.println(Arrays.toString(clean(s)));
              //[a, d, m, x, y]
            }
          
            public static String[] clean(String[] input) {
              TreeSet<String> unique = new TreeSet<>(Arrays.asList(input));
              return unique.toArray(new String[unique.size()]);
            }
          }
          

          【讨论】:

            【解决方案8】:

            您的问题的解决方案如下代码

            字符串 [] s = {"a", "y", "x","a","d", "y","m"};

                List<String> list = Arrays.asList(s);
            
                TreeSet<String> sortedSet = new  TreeSet<String>(list);
            
            
                System.out.println(sortedSet);
            

            这里首先将字符串数组转换为列表,然后将该列表放入树集,树集将删除重复项并对其进行排序。

            第二种方法是 将数组中的每个字符串添加到集合中(以删除重复项),然后将其转换为列表,然后使用 collections.sort(list);

            代码如下

            HashSet<String> set = new HashSet<String>();
            
                for (String str : s) {
                    set.add(str);
            
                }
                List<String> strArr = new ArrayList<String>(set);
                Collections.sort(strArr);
            

            如果有任何疑问,请告诉我。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-11-20
              • 2021-12-18
              • 2020-12-13
              • 2013-12-03
              • 2021-11-19
              • 2011-03-27
              • 1970-01-01
              • 2023-03-13
              相关资源
              最近更新 更多