`

java 容器

    博客分类:
  • Java
 
阅读更多
java中 List类及其子类转换成数组

e.g. List中盛放 SomeClass 对象
两个方法
1. toArray() 返回 Object[],无法强制转换成 SomeClass[],Object[]和SomeClass[]均是Object子类,想要转换,就必须对SomeClass[]中每个元素依次转换
     Object[] o= new Object[2]; 
    o[0]= "1 "; 
    o[1]= "2 "; 
    String[] ss = new String[2];
    ss[0] = (String)o[0];
    ss[1] = (String)o[1];


2.
SomeClass[] sc = null;
   sc = List.toArray(new SomeClass[List.size()]);

   含义,先创建一个大小为List容量的SomeClass[],通过toArray(),将里面的对象全部复制到SomeClass[]中,然后用sc指向这个新创建的SomeClass[]
    根据java源码
   
public Object[] toArray(Object a[]){ 
                if(a.length   <   size) 
                   a = (Object[])java.lang.reflect.Array.newInstance( 
                        a.getClass().getComponentType(), size); 
                System.arraycopy(elementData,0,a, 0, size); 
                if(a.length > size) 
                   a[size] = null; 
                return a; 
    } 


    如果看api仍然看不懂,建议看源码,自己学习分析,不要动不动就要google,先自己分析,再来求教他人。


容器存放内容
     如果容器中盛放类,数组,存放的实际上是引用,而非值。如果是基本类型,如整型,String等,则为值。
     在ArrayList, HashMap中多次犯错
e.g.  
HashMap<String[], Integer> map = new HashMap<String[], Integer>();
       for i ... {
           String[] strs = new String[3];    1
           map.put(strs, i);
       }

       语句 1 不能放在 for 外面,debug的时候,发现,HashMap中,存储的是 strs 地址,如果放在外面,则整个过程中,HashMap只有一组 key-value,HashMap 存储的内容一直未变。


3. 增加或删除容器元素
    通过遍历容器来增删元素时,要注意修改索引值,根据api,增加或删除后,该元素之后的所有元素都会发生变化,索引值均加1或减1
e.g.   
for(int i = 0; i < List.size(); i++) {
            if (some condition) {
                List.remove(i);
                i--;
            }
        }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics