您的位置:首页 > 其它

day3.22总结_List

2016-04-30 20:00 323 查看

一、集合的创建

Collection c1=new List();错

Collection c2=new ArrayList();正确

Collection c3=new Vector();正确 (vector性能比较低)

List<String> c3=newArrayList<String>();正确

ArrayList<String> c4=newArrayList<String>(5)正确

 List<? extends Number> list1=newArrayList<Double>(); //自身及子类

List<? super String> list2=newArrayList<CharSequence>();//自身及父类

 

 

二、参数传递

public
class
CollectionDemo04 {
 
   static
void
change(inta){
      a=20;
   }
   static
void
change(int[]array){
      array[0]=5;
   }
   static
void
change(String s){
      s="LMN";
   }
   public
static void
main(String[]
args) {
      int
a=10;
      change(a);//10
      System.out.println(a);
      //===========
      int
array[]={1,2,3};
      System.out.println(array);
      change(array);
      System.out.println(array[0]);
      //============
      String s="ABC";
      change(s);//change(s){s="LMN"};
      System.out.println(s);
   }

 

 

 

总结:

1.参数的传递就是对象的传递,就是传递对象的地址值,一般类型的都会在传递中改变值。(看如果新建了一个对象,原值就变)

2.特殊的:a.String---String s="ABC";就是在字符串池新建了一个,引用发生了改变。原值不变

b.array数组,地址值不变,引用指向不变,原值会改变

 

三、集合Collection的方法

反转:

 

第一种方式:先转换成数组

static
void
inverse01(List<String> list){
      Object obj[]=list.toArray();
      for(inti=0;i<obj.length/2;i++){
         Object temp=obj[i];
         obj[i]=obj[obj.length-i-1];
         obj[obj.length-i-1]=temp;
      }
      for(inti=0;i<list.size();i++){
         list.set(i, (String)obj[i]);
      }

 

第二种方式:集合

static
void
inverse02(List<String> list){
      for(inti=0,size=list.size()>>1;i<size;i++){
         list.set(list.size()-i-1,
         list.set(i,
         list.get(list.size()-i-1)));
      }
   }

 

四、LingkedList

1.方法:

addFirst();addLast();removeFirst();removeLast();

Poll() 获取并移除此列表的头(第一个元素)

Peek() 获取但不移除此列表的头(第一个元素)

 

2.底层代码实现(原理能理解,代码半懂)

package day14;
/**代表一个元素(Node)类型*/
class Element{
   /**存储数据*/
   Object data;
   /**
4000
后继指针*/
   Element next;
   /**前驱指针*/
   Element pre;
   public Element(Objectdata, Elementnext, Elementpre) {
      super();
      this.data =data;
      this.next =next;
      this.pre =pre;
   }
}
class MyLinkedList{
   private Elementfirst;
   private Elementlast;
   private
int
size;
   //定义一个header (Element类型)
   /**实现元素的添加(添加到最后)*/
   publicvoid add(Objectdata){
      //定义一个临时变量,存储最后一个节点
      Element l=last;
      //构建一个新的节点
      Element newNode=
      new Element(data,null,l);
      //判定原last节点是否为null
      if(l==null){
       first=newNode;
      }else{
       l.next=newNode;
      }
      //设置最后一个节点
      last=newNode;
      //有效元素个数加1
      size++;
   }
   public
void
addLast(Object data){
      add(data);
   }
   public
void
addFirst(Object data){
       //(参考LinkedList实现)
   }
   //......
   public
int
size(){
      return
size;
   }
   @Override
   public String toString() {
      if(size==0)return"[]";
      StringBuilder builder=
      new StringBuilder("[");
      builder.append(first.data).append(",");
      Element node=first.next;
      while(node!=null){
         builder.append(node.data).append(",");
         node=node.next;
      }
      builder.deleteCharAt(builder.length()-1);
      builder.append("]");
      return
builder.toString();
   }
}
public
class
LinkedListDemo03 {
   public
static void
main(String[]
args) {
      MyLinkedList list=
      new MyLinkedList();
      /*list.add("A");
      list.add(100);
      list.add(true);*/
      System.out.println(list.size());
      System.out.println(list);//[A,100,true]
   }
}

 

 

3.遍历

/* for(String s:list){
        System.out.println(s);
      }*/
     
      /*Iterator<String> it=
      list.iterator();
      while(it.hasNext()){
      System.out.println(it.next());
      }*/
     
      ListIterator<String> it=
      list.listIterator(list.size()-1);
      while(it.hasPrevious()){
      System.out.println(it.previous());
      }

 

五、List注意的问题:

1.删除时跳过元素问题

List<String> lst1=new ArrayList<>();
      lst1.add("A");
      lst1.add("B");
      lst1.add("C");
      for(inti=0;i<lst1.size();){
         lst1.remove(i);
      }错误的,结果是B
       自己改进的:
       for(inti=0;i<lst1.size();){
         lst1.remove(i--);
      /*for(int i=lst1.size()-1;i>=0;i--){
         lst1.remove(i);
      }*/从后面开始删除
      System.out.println(lst1);
   }

 

2.List转成数组

 List<Integer> lst=
     //此集合不能执行添加,删除操作,但可以修改
     Arrays.asList(1,2,3,4,5);
     //lst.add(100);错
     lst.set(0, 6);//正确
     System.out.println(lst);
   }

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