I have a small problem. I have a ArrayList listOfSData where every element is some like a date: for example:
[30-03-2012, 28-03-2013, 31-03-2012, 2-04-2012, ...]
Now I was wondering how can I sort this list. I mean I want to sort to this
[28-03-2013, 30-03-2012, 31-03-2012, 2-04-2012, etc].
This list must have String values. How can I sort this list? Help me because I have no idea how can I do that.
Here is a method I wrote for ordering an array of objects by their time parameter. It's done by comparing 2 String times every time, this can be easily adjusted for your date comparison by changing the pattern parameter to: "dd-MM-yyyy"
Try to use SimpleDateFormat with "d-MM-yyyy" pattern: 1. Create SimpleDateFormat 2. Parse listOfSData string array to java.util.Date[] 3. Sort date array using Arrays.sort 4. Convert Date[] to string array using the same SimpleDateFormat
You will need to implement a
Comparator<String>
object that translates your strings to dates before comparing them. ASimpleDateFormat
object can be used to perform the conversion.Something like:
here is a small example based on your input. This could be done with a few lines less, but I thought this would be better to understand. Hope it helps.
At first already given answers are write, but that decisions they are not very fast.
Standard java Collections.sort use timsort. In average case it takes O(n*log(n)) comparations, so your custom comparator will call O(n*log(n)) times.
If performance is important for you, for example if you have large array you can do following things:
Convert string dates to int or long timestamps. This takes O(n) operation. And then you just sort array of longs or integers. Comparation of two atomic int are MUCH faster than any comparator.
If you want to get MORE speed for this sort, you can use use Radix sort (http://en.wikipedia.org/wiki/Radix_sort). I takes much memory but we can optimize it. As I see you don't need to specify time of day. So the range of values is not very big. At firts pass (O(n)) you can convert date to integer value, with next assumptions: