Java教程

java手册-集合处理

本文主要是介绍java手册-集合处理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.使用集合转数组的方法,必须使用集合的toArray(T[] array),传入的是类型

完全一样的数组,大小就是list.size()。

说明:使用toArray带参方法,入参分配的数组空间不够大时,toArray方法内部将重新分配内存空间,

并返回新数组地址;如果数组元素个数大于实际所需,下标为[ list.size() ]的数组元素将被置为

null,其它数组元素保持原值,因此最好将方法入参数组大小定义与集合元素个数一致。

正例:

List<String> list = new ArrayList<String>(2);

list.add("guan");

list.add("bao");

String[] array = new String[list.size()];

array = list.toArray(array);

2.使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,

它的add/remove/clear方法会抛出UnsupportedOperationException异常。

说明:asList的返回对象是一个Arrays内部类,并没有实现集合的修改方法。

Arrays.asList体现的是适配器模式,只是转换接口,后台的数据仍是数组。

String[] str = new String[] {"you", "wu"};
List list = Arrays.asList(str);

//第一种情况:list.add("yangguanbao");运行时异常。
//第二种情况:str[0] = "gujin"; 那么list.get(0)也会随之修改。

3.不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,

如果并发操作,需要对Iterator对象加锁。

正例:

List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    if (删除元素的条件) {
         iterator.remove();
    }
 }

4.集合初始化时,指定集合初始值大小。

说明:HashMap使用HashMap(int initialCapacity) 初始化。

正例:initialCapacity = (需要存储的元素个数 / 负载因子) +1。注意负载因子(即loaderfactor)

默认为0.75,如果暂时无法确定初始值大小,请设置为16(即默认值)。

反例:HashMap需要放置1024个元素,由于没有设置容量初始大小,随着元素不断增加,

容量7次被迫扩大,resize需要重建hash表,严重影响性能。

5.高度注意Map类集合K/V能不能存储null值的情况,如下表格:

6.利用Set元素唯一的特性,可以快速对一个集合进行去重操作,避免使用

List的contains方法进行遍历、对比、去重操作。

这篇关于java手册-集合处理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!