日期:2014-05-20  浏览次数:20771 次

求ArrayList的trimToSize属性
trimToSize 在API上是写 将此 ArrayList 实例的容量调整为列表的当前大小。应用程序可以使用此操作来最小化 ArrayList 实例的存储量。

我以为如果里面是没意义的值 用trimToSize属性后 会删除那些 但经过测试后 发现并不是这样 那trimToSize的用法和意义 到底是什么??!!


String[] itest = new String[10];
int total = 5;

for (int i = 0; i < total; i++)
{
itest[i] = i + "";
}

int _i = 0;
for (String i : itest){
System.out.printf("itest[%d]:%s\n", _i++, i);
}
List<String> list = Arrays.asList(itest);

System.out.println("list.get(3):" + list.get(3));
// System.out.println(Integer.parseInt(list.get(0).toString()));
// System.out.println(Integer.parseInt(list.get(1).toString()));
System.out.println("List size:" + list.size());

ArrayList<String> al = new ArrayList<String>();
al.addAll(list);

System.out.println("ArrayList size:" + al.size());

_i = 0;
for(String str : al)
System.out.printf("ArrayList[%d]:%s\n", _i++, str);

//测试目的
al.trimToSize();

//如果为空指针 证明输出的null不是String
System.out.println("(al.get(6)).getClass().getName():" + (al.get(6)).getClass().getName());
System.out.println("al.size():" + al.size());

================控制台==================================
itest[0]:0
itest[1]:1
itest[2]:2
itest[3]:3
itest[4]:4
itest[5]:null
itest[6]:null
itest[7]:null
itest[8]:null
itest[9]:null
list.get(3):3
List size:10
ArrayList size:10
ArrayList[0]:0
ArrayList[1]:1
ArrayList[2]:2
ArrayList[3]:3
ArrayList[4]:4
ArrayList[5]:null
ArrayList[6]:null
ArrayList[7]:null
ArrayList[8]:null
ArrayList[9]:null
Exception in thread "main" java.lang.NullPointerException
at test.classtest.ClassTest.test(ClassTest.java:43)
at test.classtest.ClassTest.main(ClassTest.java:59)


------解决方案--------------------
ArrayList的尺寸是按照2的幂指数来增长的.
比如你有17个元素,其实ArrayList是分了32空间,其中有15个是空的? trimToSize就是把这15个给砍掉了...

我说的可能不对,请楼下接着说...
------解决方案--------------------
学习楼上了...楼下继续说 保持队形
------解决方案--------------------
探讨
ArrayList的尺寸是按照2的幂指数来增长的.
比如你有17个元素,其实ArrayList是分了32空间,其中有15个是空的? trimToSize就是把这15个给砍掉了...

我说的可能不对,请楼下接着说...

------解决方案--------------------
trimToSize 的作用只是去掉预留元素位置而已,楼主你在外面是看不出结果的。
------解决方案--------------------
看一下源码吧:
 * Trims the capacity of this <tt>ArrayList</tt> instance to be the
 * list's current size. An application can use this operation to minimize
 * the storage of an <tt>ArrayList</tt> instance.
trimToSize就是这个ArrayList存放的最小size