java - Java ArrayList的复杂排序

标签 java sorting alphanumeric

我在 trendList 中存储了以下字符串多变的。我进行了排序,但数据未正确排序。

ACLK_SCRN_200MHZ_DATAB_S0_P1:8应该出现在 ACLK_SCRN_200MHZ_DATAB_S0_P10:8 之前

1 < 10 ,依此类推其余字符串。

问题:如何进行字母数字排序以获得正确的顺序?

我必须创建自己的函数吗?那会是什么样子?

List<String> trendList = new ArrayList<String>(80000);

Collections.sort(trendList);

ACLK_SCRN_200MHZ_DATAB_S0_P0:8
ACLK_SCRN_200MHZ_DATAB_S0_P10:8
ACLK_SCRN_200MHZ_DATAB_S0_P11:8
ACLK_SCRN_200MHZ_DATAB_S0_P12:8
ACLK_SCRN_200MHZ_DATAB_S0_P13:8
ACLK_SCRN_200MHZ_DATAB_S0_P14:8
ACLK_SCRN_200MHZ_DATAB_S0_P15:8
ACLK_SCRN_200MHZ_DATAB_S0_P1:8
ACLK_SCRN_200MHZ_DATAB_S0_P2:8
ACLK_SCRN_200MHZ_DATAB_S0_P3:8
ACLK_SCRN_200MHZ_DATAB_S0_P4:8
ACLK_SCRN_200MHZ_DATAB_S0_P5:8
ACLK_SCRN_200MHZ_DATAB_S0_P6:8
ACLK_SCRN_200MHZ_DATAB_S0_P7:8
ACLK_SCRN_200MHZ_DATAB_S0_P8:8
ACLK_SCRN_200MHZ_DATAB_S0_P9:8
ACLK_SCRN_200MHZ_DATAB_S1_P0:8
ACLK_SCRN_200MHZ_DATAB_S1_P10:8
ACLK_SCRN_200MHZ_DATAB_S1_P11:8
ACLK_SCRN_200MHZ_DATAB_S1_P12:8
ACLK_SCRN_200MHZ_DATAB_S1_P13:8
ACLK_SCRN_200MHZ_DATAB_S1_P14:8
ACLK_SCRN_200MHZ_DATAB_S1_P15:8
ACLK_SCRN_200MHZ_DATAB_S1_P1:8
ACLK_SCRN_200MHZ_DATAB_S1_P2:8
ACLK_SCRN_200MHZ_DATAB_S1_P3:8
ACLK_SCRN_200MHZ_DATAB_S1_P4:8
ACLK_SCRN_200MHZ_DATAB_S1_P5:8
MLC_C_SAMPLE
MLC_SAMPLE
SWR
TOUCHDOWN
TEST_REV

最佳答案

您得到该结果是因为它仅使用默认的 String.compareTo 来比较字符串,该默认值使用原始字符代码。 ':' 出现在 '0'-'9' 之后,因此它会在之后进行整理。

您需要提供自己的Comparator并调用

Collections.sort(trendList, new CustomComparator());

关于java - Java ArrayList的复杂排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15144175/

相关文章:

java - Android 如何强制检查给定的字符串是否为字母数字

当我尝试将十六进制字符串转换为字节数组时,出现 javax.crypto.BadPaddingException 。为什么我会得到它?

java - Servlet getRequestDispatcher.forward() 工作不清楚

django - 按对象的 date_created 属性对来自不同模型的查询集对象列表进行排序

c - 使用结构体数组进行选择排序,使用 strcmp 进行排序

c - 确定 char 是数字还是字母

java - 如何优化使用java插入数据的处理速度?

java - iCal4j 更新和删除 iCalendar 中的 VEvent

c++ - std::sort 和 std::stable_sort 在实践中的性能差距有多大?

python - 根据数字字符分割字符串的正则表达式模式