Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 内存中的数据操作_Java_Vector_Arraylist_Data Management - Fatal编程技术网

Java 内存中的数据操作

Java 内存中的数据操作,java,vector,arraylist,data-management,Java,Vector,Arraylist,Data Management,我知道在内存中操作数据总是比在文件中操作好。目前,我将所有传入的数据放在一个静态ArrayList中,当该ArrayList有80多个条目时,我的程序将把该ArrayList的内容保存到一个文件中,并为下一波传入的数据清除该数组 我想知道使用Vector而不是ArrayList是更好(还是更差)。如果有差异,哪个更好/更差?在那种情况下呢 这是我的相关代码: public class Exchange () { private static ArrayList<String>

我知道在内存中操作数据总是比在文件中操作好。目前,我将所有传入的数据放在一个静态ArrayList中,当该ArrayList有80多个条目时,我的程序将把该ArrayList的内容保存到一个文件中,并为下一波传入的数据清除该数组

我想知道使用Vector而不是ArrayList是更好(还是更差)。如果有差异,哪个更好/更差?在那种情况下呢

这是我的相关代码:

public class Exchange () {
    private static ArrayList<String> datain = new ArrayList<String> ();
    public static void addData(String s) {
        datain.add(s);
    }

    public static boolean checkSize() {
        if (datain.size() >= 80)
            return true;
        else
            return false;
    }

    public static void writeData() throws FileNotFoundException {
        PrintWriter pw = new PrintWriter(new File ("myfile.txt"));
        for (int i = 0; i < datain.size(); i++) {
            pw.println(datain.get(i);
        }
        pw.close();
    }

    public static void clear() {
        datain = new ArrayList<String>();
    }
}
公共类交换(){
private static ArrayList datain=new ArrayList();
公共静态void addData(字符串s){
添加数据项;
}
公共静态布尔checkSize(){
如果(datain.size()>=80)
返回true;
其他的
返回false;
}
public static void writeData()引发FileNotFoundException{
PrintWriter pw=新的PrintWriter(新文件(“myfile.txt”);
对于(int i=0;i

另外,这种方法目前运行良好,我只是想知道在这种情况下使用vector是否会更好。此外,如果您看到任何不好的设计,请随意指出。谢谢!

在绝大多数情况下,使用
ArrayList
就足够了。主要区别在于
vector
是线程安全的,而
ArrayL>是线程安全的ist
不是,但鉴于您没有使用多个线程,没有理由在代码中选择
Vector
而不是
ArrayList
,除非我知道存在性能问题,否则我会这样做。大部分成本都在文件的打开和关闭上,因此我会避免这样做。我也会这样做ume附加就是你想要的

public enum Logging {
    ; // no instances
    public static final String FILE_NAME = "myfile.txt";
    private static final PrintWriter pw;

    static {
        try {
            pw = new PrintWriter(new FileWriter(FILE_NAME, true));
        } catch (IOException ioe) {
            throw new AssertionError(ioe);
        }
    }

    public static void addData(String s) {
        pw.println(s);
    }
}

注意:您的
checkSize()
方法可以简单地执行
返回datain.size()>=80;
。请尝试避免
如果(条件)返回true;否则返回false;
您可以使用
交换器
处理这类事情。一次写入80行或一行80x将花费相同的时间。您希望追加或覆盖吗?我也不理解您的逻辑:每次写入数据()调用时,它会将文件中当前的条目替换为列表中的条目。如果您愿意经常丢弃行,是否可以避免编写任何内容。Vector也是一个遗留类,在Java 1.2(1998)中被ArrayList替换除非您想要一个同步的实现,但即使这样,您也几乎总是最好以不同的方式进行同步way@user3580294:如果您想要一个与Vector类似的同步实现,您只需要
Collections.synchronizedList(new ArrayList())
这就是为什么我说用不同的方式进行同步几乎总是更好的原因