Sınırlandırılmış bir dize üzerinde çok sütunlu sıralama yeteneği sağlayan bir karşılaştırıcı inşa ediyorum. Şu anda ham String belirteçleri bölme için tercih edilen seçim olarak String sınıfından split yöntemini kullanıyorum.
Bu, raw String'i bir String dizisine dönüştürmenin en iyi performans yolu mu? Milyonlarca satırı sıralayacağım, bu yüzden yaklaşımın önemli olduğunu düşünüyorum.
İyi çalışıyor gibi görünüyor ve çok kolay, ama java'da daha hızlı bir yol olup olmadığından emin değilim.
Benim karşılaştırıcıda sıralama şu şekilde çalışır:
public int compare(String a, String b) {
String[] aValues = a.split(_delimiter, _columnComparators.length);
String[] bValues = b.split(_delimiter, _columnComparators.length);
int result = 0;
for( int index : _sortColumnIndices ) {
result = _columnComparators[index].compare(aValues[index], bValues[index]);
if(result != 0){
break;
}
}
return result;
}
İster inanın ister inanmayın çeşitli yaklaşımları karşılaştırdıktan sonra, split yöntemi java'nın en son sürümünü kullanan en hızlı yöntemdi. Tamamladığım karşılaştırıcıyı buradan indirebilirsiniz: https://sourceforge.net/projects/multicolumnrowcomparator/
StringUtils.split[PreserveAllTokens](text, delimiter)
.