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