我有一个小问题。我有一个ArrayList listOfSData,其中每个元素都像日期一样:例如:用字符串日期排序列表
[30-03-2012,28-03-2013,31-03-2012,2-04-2012,...]
现在我想知道如何排列这个列表。我的意思是我想对此进行排序
[28-03-2013,30-03-2012,31-03-2012,2-04-2012等]。
此列表必须具有字符串值。我怎样才能整理这个列表?帮助我,因为我不知道该怎么做。
我有一个小问题。我有一个ArrayList listOfSData,其中每个元素都像日期一样:例如:用字符串日期排序列表
[30-03-2012,28-03-2013,31-03-2012,2-04-2012,...]
现在我想知道如何排列这个列表。我的意思是我想对此进行排序
[28-03-2013,30-03-2012,31-03-2012,2-04-2012等]。
此列表必须具有字符串值。我怎样才能整理这个列表?帮助我,因为我不知道该怎么做。
您将需要实现一个Comparator<String>
对象,它在比较它们之前将字符串转换为日期。 A SimpleDateFormat
对象可用于执行转换。
喜欢的东西:
class StringDateComparator implements Comparator<String>
{
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
public int compare(String lhs, String rhs)
{
return dateFormat.parse(lhs).compareTo(dateFormat.parse(rhs));
}
}
Collections.sort(arrayList, new StringDateComparator());
这里是我写的自己的时间参数排序对象数组的方法。它通过比较,每次2分次完成,这可以很容易地通过改变图形参数的日期比较调整:“DD-MM-YYYY”
int repositorySize = tempTasksRepository.size();
int initialRepositorySize = repositorySize;
Task soonTask = tempTasksRepository.get(0);
String pattern = "HH:mm";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
for (int i= 0; i < initialRepositorySize; i++)
{
for (int j= 0; j < repositorySize; j++)
{
Task tempTask = tempTasksRepository.get(j);
try
{
Date taskTime = simpleDateFormat.parse(tempTask.getTime());
Date soonTaskTime = simpleDateFormat.parse(soonTask.getTime());
// Outputs -1 as date1 is before date2
if (taskTime.compareTo(soonTaskTime) == -1)
{
soonTask = tempTask;
}
}
catch (ParseException e)
{
Log.e(TAG, "error while parsing time in time sort: " + e.toString());
}
}
tasksRepository.add(soonTask);
tempTasksRepository.remove(soonTask);
if (tempTasksRepository.size() > 0)
{
soonTask = tempTasksRepository.get(0);
}
repositorySize--;
尝试使用SimpleDateFormat用“d-MM- YYYY”图案: 1.创建的SimpleDateFormat 2. 4.转换日期[]到字符串数组使用相同的SimpleDateFormat
解析listOfSData字符串数组来使用Arrays.sort java.util.Date [] 3.排序日期阵列这里是一个基于你的输入的小例子。这可以少用几行来完成,但我认为这会更好理解。希望能帮助到你。
List<String> values = new ArrayList<String>();
values.add("30-03-2012");
values.add("28-03-2013");
values.add("31-03-2012");
Collections.sort(values, new Comparator<String>() {
@Override
public int compare(String arg0, String arg1) {
SimpleDateFormat format = new SimpleDateFormat(
"dd-MM-yyyy");
int compareResult = 0;
try {
Date arg0Date = format.parse(arg0);
Date arg1Date = format.parse(arg1);
compareResult = arg0Date.compareTo(arg1Date);
} catch (ParseException e) {
e.printStackTrace();
compareResult = arg0.compareTo(arg1);
}
return compareResult;
}
});
伟大的服务,提供代码! ;) 不过实话说。正如我所看到的,关于sortig Collection对象概念的几句话会很棒。 – 2013-03-17 16:35:06
它为我工作!谢谢 – 2017-08-28 10:06:24
起初已经给出答案是写,但是那个决定他们不是很快。
标准java Collections.sort使用timsort。在平均情况下,需要O(n * log(n))比较,所以您的自定义比较器将调用O(n * log(n))次。
如果性能对你很重要,例如,如果你有大的数组,你可以下面的事情要做:
将字符串转换日期为int或长时间戳。这需要O(n)操作。然后你只是对long或整数进行排序。两个原子int的比较比任何比较器都快。
如果你想获得更快的速度,你可以使用使用基数排序(http://en.wikipedia.org/wiki/Radix_sort)。我需要很多记忆,但我们可以优化它。正如我所看到的,你不需要指定一天的时间。所以价值的范围不是很大。 在firts通(O(n))的,你可以转换日期为整数值,与未来的假设:
http://code.google.com/p/date-sorting-example/source/browse/trunk/date-util-test/src/date/util/test/DateUtil.java? r = 3 – Raghunandan 2013-03-17 15:57:21