您的位置:首页 > 编程语言 > Java开发

java在使用实现了List接口时候应该注意的问题

2012-06-21 00:09 681 查看
List 接口 继承自Collection接口 .. 元素顺序按照插入顺序与 ...有2中List 。

ArrayList 和LinkedList 他们都是变长数组,只是存储方式不同 。。ArrayList是以数组存储,适合元素的查找 、、

LinkedList是以链表为存储结构 适合高效率的插入删除 。

LinkedList 和ArrayList都实现了 List接口

实现了Iterable接口可以进行迭代for循环操作。。。不能通过迭代for循环的集合删除元素 。。。

我们在使用list的时候经常会需要返回List的一个子列表 。

我们知道在List接口中存在一个 subList方法可以返回 从 0到 List长度的索引之间的

元素的一个子视图 ..这个视图和原列表存在这关系映射.在子视图中增加或删除都会影响到原list ;

看下面一段代码 我们发现 我们先通过删除视图中的所有元素从而 删除list中包含的所有子列表的元素 结果为空。

我们有通过子列表视图添加元素 发现 原列表右增加了元素...使用时候应该注意

import java.util.ArrayList;

import java.util.List ;

class MyObject {

static int i=0 ;

@Override

public String toString() {

// TODO Auto-generated method stub

return this.getClass().getName();

}

}

public class MyArray {

private List<MyObject> l=new ArrayList<MyObject>() ;

public void add(MyObject ...obj ){

for(MyObject tem:obj){

l.add(tem) ;

}

}

public void show(){

System.out.println(this.l );

}

public static void main(String[]args){

MyArray arr=new MyArray() ;

MyObject ss[]={new MyObject(),new MyObject(),new MyObject(),new MyObject()} ;

arr.add(ss) ;

System.out.println("原始数据");

arr.show() ;

List<MyObject> ll=arr.getSub(0,4) ; //返回0-4之间的所有值的列表不包括 索引4

System.out.println("通过子视图删除所有元素");

ll.removeAll(ll); //通过子列表删除所有列表

arr.show() ;

System.out.println("通过子视图添加");

ll.add((MyObject) new MyObject()) ;

ll.add((MyObject) new MyObject()) ;

ll.add((MyObject) new MyObject()) ;

arr.show() ;

}

public List<MyObject> getSub(int i,int j) {

return l.subList(i, j);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: