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

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

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);
 }

}