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--;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值