day3.22总结_List

一、集合的创建

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;

   /**后继指针*/

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

   }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值