一、封装好的动态数组:
java、C#在定义数组的时候需要指定数组长度,如果数组需要可变长度,那么使用ArrayList或其他的集合类来解决,Vector是同步的而ArrayList是非同步的,Vector性能差些。
ArrayList 是可变长度的,初始化是10个长度,没有赋值的都是null, 超过10个后变成20个了,一直按10的倍数来递增的。见下图:
java为ArrayList封装了很多使用的方法,如add等,这里就不再赘述。
二、自定义动态字串数组:
正如ArrayList的内部实现,所谓的可变长度,就是往里面放值直到放满后再重新new一个更加长的数组,把之前放的值重新再放一次,这个时候就有剩余的空间继续放值了。根据这个思路,我们可以自定义一个工具类,来动态的改变数组的长度,给数组添加元素。
private static String[] insert(String[] arr, String str)
{
int size = arr.length;
String[] tmp = new String[size + 1];
System.arraycopy(arr, 0, tmp, 0, size);
tmp[size] = str;
return tmp;
}
这样我们在使用的时候可以给数组随意初始化一个长度,然后利用该工具动态改变数组,而不用担心越界的问题。
综合上面的总结,通过下面的代码来对比一下各自的使用:
List<TemplateDetails> templateDetailsList=commonEao.findResultListByEqual(TemplateDetails.class, equalFields);
//固定长度
String[] pks= new String[templateDetailsList.size()];
//数组集合
List<String > pksList=new ArrayList<String>();
Vector< String > pksVector= new Vector<String>();
for (TemplateDetails templateDetails : templateDetailsList) {
//给已确定长度的数组添加元素
ArrayUtils.add(pks, templateDetails.getId());
//动态改变数组长度并增加元素
pks = insert(pks,templateDetails.getId() );
//ArrayList动态数组的集合
pksList.add(templateDetails.getId() );
//安全了线程,降低了性能,jdk1.5版本(过时)
pksVector.add(templateDetails.getId());
}
三、数组操作工具类:
工具类一般都是静态的:
System.arraycopy(arr, 0, tmp, 0, size);
ArrayUtils.add(pks, templateDetails.getId());
自定义的封装:
pks = insert(pks,templateDetails.getId() );
不怕不知道就怕不知道,这些工具类,还有很多其他的操作,具有小巧灵活强大的特点,往往会起到很关键的作用,这里就不再赘述这些工具的其他的方法。在编程中,通过了解一些内部实现,可以自定义一些小辅助工具,更方便程序开发。