在Java中的ArrayList中保持独立ID计数器内的类对象

时间:2013-02-18 19:37:49

标签: java database arraylist

我很抱歉我不太了解编程,但我现在正试着通过Java实验来学习。通过尝试编写一个桌面应用程序,我将会非常雄心勃勃,将来也会成为一个Web应用程序。当然,我希望这两个应用程序能够相互同步。

我想象,让我们说..任务列表守护者。对于Web应用程序,我将使用MySQL作为数据库。但是在我的桌面应用程序中,我想象我会使用ArrayList作为数据库。 (或者有一种方法我应该使用一些Java DB而不是类吗?)

如果我目前正走错路,我现在处于开发阶段,所以我可以轻松改变方向。但实际上,我有一个类Task和一个用于保存任务的类Database。

在我试图保持与MySQL记录配对的一致ID的想法中,我试图存储一个taskID。我已经有了一些工作,但我也认为这不是最好的解决方案。我只是看到是否有人可以指出我可以调查和/或应该尝试的不同的,更有效的方向。

这是我到目前为止编译的代码:

import java.util.ArrayList;

public class Todos {

    public static class Database {
        private ArrayList<Task> database = new ArrayList<Task>();
        private int taskCounter = 0;

        /*
        // This above taskCounter is not being incremented inside my
        // addTask method, so I had put the for-loop in there..

        public boolean addTask(Task task)
        {
            boolean addItemSuccessful = false;
            int originalArraySize = database.size();
            taskCounter++;
            database.add(task);
            if (database.size() > originalArraySize)
            {
                addItemSuccessful = true;
            }
            return addItemSuccessful;
        }
        */

        public boolean addTask(Task task)
        {
            boolean addItemSuccessful = false;
            int originalArraySize = database.size();
            int taskID = 0;
            for(int i = 0; i < database.size(); i++) {
                if (database.get(i).taskID > taskID) {
                    taskID = database.get(i).taskID;
                    System.out.println(taskID);
                }
            }
            taskID++;
            task.setTaskID(taskID);
            System.out.println(taskID);
            database.add(task);
            if (database.size() > originalArraySize)
            {
                addItemSuccessful = true;
            }
            return addItemSuccessful;
        }

        public boolean removeTask(int taskID) {
            // This code is actually not correct, here but this is the idea.
            boolean removeItemSuccessful = false;
            int originalArraySize = database.size();
            database.remove(taskID);
            if (database.size() < originalArraySize)
            {
                removeItemSuccessful = true;
            }
            return removeItemSuccessful;
        }

    }

    public static class Task {

        private int taskID;
        private String task;
        private Priority priority = Priority.ZERO;

        public enum Priority { ZERO, MAYBE, LOW, MEDIUM, HIGH, EXTREME }

        public void setTaskID(int taskID) {
            this.taskID = taskID;
        }
        // .. Other Getters and Setters for Task
    }

    public static void main(String[] args) {

        Database database = new Database();
        Task newTask = new Task();

        database.addTask(newTask);  // Add 1st Task, taskID = 1
        database.addTask(newTask);  // Add 2nd Task, taskID = 2
        database.addTask(newTask);  // Add 3rd Task, taskID = 3
        database.removeTask(2);     // Remove Task 2
        database.addTask(newTask);  // Add 4th Task, taskID = 4

    }
}

1 个答案:

答案 0 :(得分:0)

当您在数据库中插入新条目时,db会自动分配一个自动增量ID(我想您也可以选择自己的ID但不应该)。如果您没有具体原因,我建议您不要将其包含在Task的字段中,而是将其用作访问和定位ArrayList的索引,或者可能更多明确地使用HashMap <Integer, Task>。否则,您可以创建一个静态字段来生成自动增量ID,或继续前进。