java编程规约三

七、集合处理

1、尽量使用String对象做Map的key

2、list转数组,用list的toArray(T[] array),传入的参数array是类型完全一样的数组,大小是list.size()

示例:(无参的toArray返回的是Object[]类)

List<String> list = new ArrayList<String>(2);
list.add("guan");
list.add("bao");
String[] array = new String[list.size()];
array = list.toArray(array);

3、数组转集合

  (1)对基本数据类型的数组支持不友好

  (2)Arrays.asList()返回的是Arrays类的一个内部类ArrayList,该内部类并未实现集合的修改方法(add/remove),因此不能使用这个转换后的集合

调用add/remove方法

  (3)当使用该方法转换时,数组和列表将链接在一起,更新其中之一,另一个随之更新 

依次给出3个示例:

static void example2(){
//第一个例子
   
int[] arr = {1, 2};//基本类型的数组 List list = Arrays.asList(arr); list.forEach(i->System.out.println(i));//打印出来的不是1,2,而是[I@2d98a335,这是一个对象的内存地址 System.out.println(list.size());//打印的是1而不是2,事实是list的元素类型变成了int[],而不是期望的int或Integer //第二个例子 String[] arr1 = {"a","b","c"}; List list1 = Arrays.asList(arr1); list1.add("d");//调用add报错java.lang.UnsupportedOperationException list1.remove("a");//调用remove报错java.lang.UnsupportedOperationException //第三个例子 list1.forEach(s->System.out.println(s));//打印结果是a,b,c arr1[0] = "d";//现在修改原数组的第一个元素为d System.out.println(list1.get(0));//转换后的list的第一个元素跟着变为d list1.set(0,"e");//现在修改转换后的list的第一个元素为e System.out.println(arr1[0]);//原数组的第一个元素跟着变为e }

4、for-each循环优先于传统的for循环,为了简洁性和预防bug,并且性能不会丢失

List<String> list = Arrays.asList("aa","bb","cc");
//增强的for循环
for (String s:list) { System.out.println(s); } list.forEach(s->System.out.println(s));

foreach内不要进行元素的修改(add/remove)操作,用Iterator

List<String> list3 = new ArrayList<>();
list3.add("aa");
list3.add("bb");
list3.add("cc");
list3.add("aa");
list3.add("dd");
list3.add("aa");
list3.add("ee");
Iterator<String> it = list3.iterator();
while(it.hasNext()){
      if("aa".equals(it.next())){
           it.remove();
      }
}
 list3.forEach(s->System.out.println(s));//bb,cc,dd,ee

5、集合初始化时指定集合大小

ArrayList:初始容量10,扩容倍数:1.5倍

HashMap 初始容量1<<4=16,扩容倍数:2倍

HashSet:基于HashMap实现,和HashMap相同

6、遍历HashMap用java8的foreach或entrySet

Map<String, Integer> map= new HashMap<>();
map.put("A", 10);
map.put("B", 20);
map.put("C", 30);

map.forEach((k,v)->System.out.println( k + "= " + v));
map.forEach((k,v)->{
    System.out.println( k + " = " + v);
    if("A".equals(k)){
        System.out.println("Hello A");
    }
});

 

posted @ 2018-10-27 18:09  鼠标的博客  阅读(347)  评论(0编辑  收藏  举报