有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (5) 个答案

  1. # 1 楼答案

    你是说数据库吗?因为你可以用ArrayList来表示:

    ArrayList<Integer> array = new ArrayList<Integer>();
    array.add(3);
    array.add(4);
    array.add(5); // Appends to the end of this list
    
    int myInt = array.remove(0); // Return first element
    

    如果你真的需要一个数据库,你能告诉我们你想做什么的更多细节吗

    [编辑] 我建议你阅读:Java Best Practices – Vector vs ArrayList vs HashSet谢谢

  2. # 2 楼答案

    任何可以通过JDBC访问的关系数据库:MySQL、PostgreSQL、Oracle、SQLServer、DB2、Informix、Interbase、Firebird、Ingress,随便你说

    如果你正在寻找轻量级的东西,你可以看看SQLite's API for Java

  3. # 3 楼答案

    听起来你说的是排队。看看JMS,看看这是不是你想要的概念。虽然对于这样一个简单的任务来说,它似乎是一个很大的工具,但它将为您提供FIFO持久化(您希望的任何数据库)功能

  4. # 4 楼答案

    除了使用数据库之外,如果你只有一些整数,你可以将它们写入一个普通文件。普通文件保留顺序,但是删除条目可能会很昂贵

    使用普通文件,您可以在大约0.1秒内写入/重写100万个整数

    int原语的一个有效集合是TIntArrayList。它类似于@JPelletier的建议,但包含一个int[]。一百万个int值需要大约4MB的内存或磁盘

    编辑:这表明对于100万个数字来说,ArrayList是一个糟糕的选择。主要是因为remove(0)是O(n)而不是O(1)

    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.List;
    
    // based on http://www.cs.princeton.edu/introcs/43stack/RingBuffer.java.html
    public class IntRingBuffer {
        private final int[] a;       // queue elements
        private int N = 0;           // number of elements on queue
        private int first = 0;       // index of first element of queue
        private int last  = 0;       // index of next available slot
    
        // cast needed since no generic array creation in Java
        public IntRingBuffer(int capacity) {
            a = new int[capacity];
        }
    
        public boolean isEmpty() { return N == 0; }
        public int size()        { return N;      }
    
        public void enqueue(int item) {
            if (N == a.length) { throw new RuntimeException("Ring buffer overflow"); }
            a[last] = item;
            last = (last + 1) % a.length;     // wrap-around
            N++;
        }
    
        // remove the least recently added item - doesn't check for underflow
        public int dequeue() {
            if (isEmpty()) { throw new RuntimeException("Ring buffer underflow"); }
            int item = a[first];
            N--;
            first = (first + 1) % a.length;   // wrap-around
            return item;
        }
    
        public static void main(String... args) {
            int size = 1000000;
            {
            long start = System.nanoTime();
            IntRingBuffer list = new IntRingBuffer(size);
            for(int i=0;i< size;i++)
                list.enqueue(i);
            for(int i=0;i< size;i++)
                list.dequeue();
            long time = System.nanoTime() - start;
            System.out.println(list.getClass().getSimpleName()+": Took "+time/1000/1000+" ms to add/remove "+size+" elements");
            }
            {
            long start = System.nanoTime();
            List<Integer> list = new LinkedList<Integer>();
            for(int i=0;i< size;i++)
                list.add(i);
            for(int i=0;i< size;i++)
                list.remove(0);
            long time = System.nanoTime() - start;
            System.out.println(list.getClass().getSimpleName()+": Took "+time/1000/1000+" ms to add/remove "+size+" elements");
            }
            {
            long start = System.nanoTime();
            List<Integer> list = new ArrayList<Integer>();
            for(int i=0;i< size;i++)
                list.add(i);
            for(int i=0;i< size;i++)
                list.remove(0);
            long time = System.nanoTime() - start;
            System.out.println(list.getClass().getSimpleName()+": Took "+time/1000/1000+" ms to add/remove "+size+" elements");
            }
    
        }
    }
    

    印刷品

    IntRingBuffer: Took 31 ms to add/remove 1000000 elements
    LinkedList: Took 252 ms to add/remove 1000000 elements
    ArrayList: Took 325832 ms to add/remove 1000000 elements
    
  5. # 5 楼答案

    我不认为真的有“FIFO数据库”这样的东西。数据库通常允许您使用某种索引方案以任何所需的顺序访问数据。通过将序列号附加到每条记录并按顺序读取,可以在数据库中实现FIFO队列。我用过的任何数据库都能做到这一点

    也许巴勃罗给出的答案很简单:使用任何关系数据库。选择一个像MySQL或Postgres这样的免费软件,玩它,了解它们的功能