在链表的方法内对日期进行排序

时间:2015-12-13 15:55:58

标签: java sorting date linked-list

我将一堆日期添加到待办事项列表list2016中,现在我需要按日期排序这些待办事项列表项目(最快,最后一次)。

它应该全部发生在我的add方法中,但我不知道如何这样做。有什么想法吗?

public class ToDoListEntry 
{
    String task;
    LocalDate date;
    ToDoListEntry next;

    public ToDoListEntry(LocalDate date, String task) 
    {
        this.task = task;
        this.date = date;
    }
}

接下来我试图添加一个数组,但哪个不起作用:

public class ToDoList 
{
    ToDoListEntry first;
    int size;

    public ToDoList ()
    {
        first = null;
        size = 0;
    }

    public void add(ToDoListEntry newTask) 
    {
        if (first == null)
        {
            first = newTask;
        }
        else
        {
            ToDoListEntry zeiger = first;
            while (zeiger.next != null)
            {
                zeiger = zeiger.next;
            }
            zeiger.next = newTask;
        }
        size++;
    }

    public String print()
    {
        String result = "";
        if (first == null) 
        {
            result = "Empty list!\n";
        } 
        else 
        {
            ToDoListEntry pointer = first;
            while (pointer != null) 
            {
                result += "Until " + pointer.date + " Task: " + pointer.task + "\n";
                pointer = pointer.next;
            }
        }
        System.out.println(result);
        return result;
    }
}
最后,主要课程。它应该创建一个新的ToDoList并打印出来(注意我没有包含print()方法):

public class MyMainClass
{
    public static void main(String[] args) 
    {
        System.out.println("Test 00: Empty List");
        ToDoList list2016 = new ToDoList();

        list2016.print(); 

        System.out.println("Test 01: add");
        list2016.add(new ToDoListEntry(LocalDate.of(2016, 8, 15), "Do workout"));
        list2016.add(new ToDoListEntry(LocalDate.of(2016, 6, 3), "Buy apples"));
        list2016.add(new ToDoListEntry(LocalDate.of(2016, 10, 11), "Read Books"));
        list2016.print();
    }
}

1 个答案:

答案 0 :(得分:2)

这是一种低效且混乱的方式。然而,要实现你想要的,我改变了你的两个课程。这些课程是您的ToDoList课程和main课程。

<强> ToDoList.java

import java.util.*;
import java.time.*;

public class ToDoList 
{
    ToDoListEntry first;
    ArrayList<LocalDate> datesList = new ArrayList();
    ArrayList<String> results = new ArrayList();

    public ToDoList ()
    {
        first = null;
    }

    public void add(ToDoListEntry newTask)
    {
        if (first == null)
        {
            first = newTask;
        }
        else
        {
            ToDoListEntry zeiger = first;
            while (zeiger.next != null)
            {
                zeiger = zeiger.next;
            }
            zeiger.next = newTask;
        }
    }

    public void sortDates()
    {
        Collections.sort(datesList);
    }

    public void compareAndSort()
    {
        ArrayList<String> tempDates = new ArrayList();
        for(LocalDate lD:datesList)
        {
            tempDates.add(lD+"");
        }
        ArrayList<String> tempSorted = new ArrayList();
        for(String s:tempDates)
        {
            for(String a:results)
            {
                if(a.contains(s))
                {
                    if(!tempSorted.contains(a))
                    {
                        tempSorted.add(a);
                    }
                }
            }
        }

        results=tempSorted;
        for(String s:results)
        {
            System.out.println(s);
        }
    }

    public String print()
    {
        String result = "";
        if (first == null) 
        {
            result = "Empty list!\n";
            System.out.println(result);
        }
        else 
        {
            ToDoListEntry pointer = first;
            while (pointer != null) 
            {
                result += "Until " + pointer.date + " Task: "+ pointer.task +"\n";
                if(LocalDate.now().isBefore(pointer.date))
                {
                    results.add("Until " + pointer.date + " Task: "+ pointer.task);
                }

                datesList.add(pointer.date);
                pointer = pointer.next;
            }
        }
        return result;
    }

    public String printDates()
    {
        String dates = datesList.toString();
        System.out.println(dates);
        return dates;
    }
}

Test.java (这就是您所说的main课程)

import java.util.*;
import java.time.*;

import java.util.*;
import java.time.*;

public class Test
{
    public static void main(String[] args)
    {
        System.out.println("Test 00: Empty List");
        ToDoList list2016 = new ToDoList();

        list2016.print(); 

        System.out.println("Test 01: add");
        list2016.add(new ToDoListEntry(LocalDate.of(2016, 8, 15), "Do workout"));
        list2016.add(new ToDoListEntry(LocalDate.of(2015, 2, 18), "Hand in Homework"));
        list2016.add(new ToDoListEntry(LocalDate.of(2016, 6, 3), "Buy apples"));
        list2016.add(new ToDoListEntry(LocalDate.of(2016, 10, 11), "Read Books"));
        list2016.add(new ToDoListEntry(LocalDate.of(2016, 10, 11), "Read Homework"));

        list2016.print();
        list2016.sortDates();
        list2016.compareAndSort();
    }
}

我有两张便条。

第一个是因为你特意说soonest我添加了一个删除已经过了当前日期的日期的函数。如果您愿意,可以通过更改if语句if(LocalDate.now().isBefore(pointer.date))

来更改此值

其次,除非ToDoList.print()为空,否则first实际上不会打印任何内容。