Java基础知识随笔

来源:互联网 发布:奥数优化训练22讲 编辑:程序博客网 时间:2024/06/03 23:41

 一、集合部分

Java 中  ArrayList 源码浅析:

     java 使用ArrayList 的构造函数 

 public ArrayList(int initialCapacity) {        super();        if (initialCapacity < 0)            throw new IllegalArgumentException("Illegal Capacity: "+                                               initialCapacity);        this.elementData = new Object[initialCapacity];    }

其中

 initialCapacity : 初始化容量大小的参数

elementData :一个Object 类型的数组,即实现 ArrayList 的底层数据结构,Java中对arrayList的操作都是基于该数组进行

对ArrayList 元素进行删除操作:

public E remove(int index) {        rangeCheck(index);        modCount++;        E oldValue = elementData(index);        int numMoved = size - index - 1;        if (numMoved > 0)            System.arraycopy(elementData, index+1, elementData, index,                             numMoved);        elementData[--size] = null; // clear to let GC do its work        return oldValue;    }

numMoved:删除一个元素后需要移动的元素个数

System.arraycopy(elementData, index+1, elementData, index, numMoved); 将移动元素后的数组拷贝到原始数组

elementData[--size]  = null; :将数组最后一个元素删掉。因为拷贝了数组后最后一个元素就是多余的了


二 、Java基本类型部分

  1.      Integer与int的区别:Integer是int的包装类型 是一个类 而int 是一个基本数据类型。Integer的出现体现了Java面向对象的特性。其次,在Integer类提供了许多方法进行操                                                  作;在某些地方我们只能使用Integer 类型 比如要往集合List泛型中添加对象时,不能用int ,只能用Integer。                                     

                   int i = 3;       List<Integer> alist = new ArrayList<Integer>();        alist.add(i);

  2. 在向一个列表里面循环添加对象时,列表里面添加的是对象的引用也就是说同一个对象后面复值会覆盖前面的

      例如: 

      
     ClusterUserDetail tempClusterUserDetail = new ClusterUserDetail();
     for (int i = 0; i < clusterAccounts.size(); i++) {     tempClusterUserDetail = this.clusterUserMapper.findClusterUserDetail(accountId, clusterId);     clusterUserDetails.add(tempClusterUserDetail);     }
第一种写法 每次添加进去的都是tempClusterUserDetail  的引用  所以后面赋给 tempClusterUserDetail 的值会覆盖掉前面的值 最后列表里面全都是最后一次的值
但是第二种写法每次都会重新new 一个对象  这样就不会覆盖掉前面的值

      for (int i = 0; i <clusterAccounts.size(); i++) {     ClusterUserDetail tempClusterUserDetail = new ClusterUserDetail();     tempClusterUserDetail = this.clusterUserMapper.findClusterUserDetail(accountId, clusterId);     clusterUserDetails.add(tempClusterUserDetail);     }

0 0
原创粉丝点击