我在 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/