黑马程序员——java基础——集合框架

(1)对象数组概述:

代码注意事项:A:自己的类名不要和我们学习的要使用的API的类名相同。

              B:复制代码的时候,很容易把那个类所在的包也导入过来,容易出现不能理解的问题。

数组既可以存储基本数据类型,也可以存储引用类型。它存储引用类型的时候的数组就叫对象数组。

2:集合(Collection)

      (1)集合的由来?

              我们学习的是Java -- 面向对象 -- 操作很多对象 -- 存储 -- 容器(数组和StringBuffer)-- 数组

              而数组的长度固定,所以不适合做变化的需求,Java就提供了集合供我们使用。

(2)集合和数组的区别?

              A:长度区别

                     数组固定

                     集合可变

              B:内容区别

                     数组可以是基本类型,也可以是引用类型

                     集合只能是引用类型

            集合只能存储对象。

              C:元素内容

                     数组只能存储同一种类型

                     集合可以存储不同类型(其实集合一般存储的也是同一种类型)

(3)集合的继承体系结构?

              由于需求不同,Java就提供了不同的集合类。这多个集合类的数据结构不同,但是它们都是要提供存储和遍历功能的,

              我们把它们的共性不断的向上提取,最终就形成了集合的继承体系结构图。

              Collection

                     |--List

                            |--ArrayList

                            |--Vector

                            |--LinkedList

                     |--Set

                            |--HashSet

                            |--TreeSet

(4)Collection的功能概述

              A:添加功能

                     add(Objectobj)

         Boolean  addAll(Collection c) :添加一个集合的元素。

              B:删除功能

                      Void clear( ): 移除所有元素。

remove(Object obj)

              C:判断功能

                     boolean   contains(Object obj):  判断集合中是否包含指定的元素。

           Boolean containsAll( Collection c) : 判读集合中是否包含指定的集合元素。

           Boolean  isEmpty() : 判断集合是否为空。

              D:获取功能

                     Iterator iterator() :迭代器,集合的专用遍历方式。

      Object   next() : 获取元素,并移动到下一个位置。

              NoSuchElementException: 报错,没有这样的元素,因为已经到最后了。

       Boolean  hasNext(): 如果仍有元素可以迭代,则放回true()。

              E:长度功能

                     size()

          包含功能:

          Boolean  containsAll( Collectionc):判断集合中是否包含指定的集合元素。

               (只有包含所有的元素,才叫包含)。

              F:交集(了解)

         Boolean  retainAll(Collection c): 两个集合都有的元素。(元素去哪了,返回的boolean又是什么意思?)。

Boolean AB做交集,最终的结果保存在A中,B不变。

          返回值表示的是A是否发生过改变。 A集合发生改变返回Ture

              G:把集合转数组(了解)

          Object[ ]  toArray( ): 把集合转换成数组。

       (5)Collection集合的遍历

              A:把集合转数组(了解)

  

   //创建对象;
         Collection c = new ArrayList();
         
         //添加元素:
        c.add("hello"); //Object obj = "hello";向上转型。
        c.add( "world");
        c.add("java");
        //遍历
        //Object[] toArray():把集合转成数组,可以实现集合的遍历。
        Object[] objs= c.toArray();
        for(int x =0; x<objs.length; x++){
           //向下转型;
       // System.out.println(objs[x]+"----"+objs[x].length);
       // objs[x].length:  此方法实现不了。因为是oject类型。
           
           String s = (String) objs[x];
           System.out.println(s+ s.length());
           
        }  
         
   }

              B:while和 for迭代器(集合专用方式)

    

//创建集合对象;
     Collection  c = new ArrayList();
    
     c.add("hello");
     c.add("woeld");
     c.add("java");
    
     //Iterator itrator(); 迭代器,集合的专用遍历
     Iterator  it = c.iterator(); //实际返回的肯定是子类对象,这里是多态。
    
    while(it.hasNext()){
       String s =(String) it.next();
       System.out.println(it.next());
 
for(Iteratorit1 = c.iterator();it1.hasNext();){
        String s = (String)  it1.next();
        System.out.println(s);
     }

       (6)迭代器

System.out.println((Student)it.next()).getName() +”----------“+(Student) it.next()).getAge());

  注意:此拿的是第一个学生的名字和第二个学生的年龄。

              A:是集合的获取元素的方式。

              B:是依赖于集合而存在的。

              C:迭代器的原理和源码。

                     a:为什么定义为了一个接口而不是实现类?

                     b:看了看迭代器的内部类实现。

       (7)Collection集合的案例(遍历方式迭代器)

              集合的操作步骤:

                     A:创建集合对象

                     B:创建元素对象

                     C:把元素添加到集合

                     D:遍历集合

              A:存储字符串并遍历

                    

 importjava.util.Collection;
                     importjava.util.ArrayList;
                     importjava.util.Iterator;
                    
                     publicclass CollectionDemo {
                            publicstatic void main(String[] args) {
                                   //创建集合对象
                                   Collectionc = new ArrayList();
                                  
                                   //创建并添加元素
                                   c.add("hello");
                                   c.add("world");
                                   c.add("java");
                                  
                                   //遍历集合
                                   Iteratorit = c.iterator();
                                   while(it.hasNext()){
                                          Strings =(String) it.next();
                                          System.out.println(s);
                                   }
                            }
                     }
        

              B:存储自定义对象并遍历

                   

  publicclass Student {
                            privateString name;
                            privateint age;
                           
                            publicStudent(){}
                           
                            publicStudent(String name,int age) {
                                   this.name= name;
                                   this.age= age;
                            }
                           
                            //getXxx()/setXxx()
                     }
                    
                     importjava.util.Collection;
                     importjava.util.ArrayList;
                     importjava.util.Iterator;
                    
                     publicclass StudentDemo {
                            publicstatic void main(String[] args) {
                                   //创建集合对象
                                   Collectionc = new ArrayList();
                                  
                                   //创建学生对象
                                   Students1 = new Student("林青霞",27);
                                   Students2 = new Student("风清扬",30);
                                   Students3 = new Student("刘意",30);
                                   Students4 = new Student("武鑫",25);
                                   Students5 = new Student("刘晓曲",16);
                                  
                                   //添加元素
                                   c.add(s1);
                                   c.add(s2);
                                   c.add(s3);
                                   c.add(s4);
                                   c.add(s5);
                                  
                                   //遍历集合
                                   Iteratorit = c.iterator();
                                   while(it.hasNext()){
                                          Students = (Student)it.next();
                                          System.out.println(s.getName()+"---"+s.getAge());
                                   }
                            }
                     }

 

3:集合(List)(掌握)

       (1)List是Collection的子接口

           特点:有序(存储顺序和取出顺序一致),可重复

有序的Collection(也成为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

       (2)List的特有功能:(自己补齐)

              A:添加功能

              Void  add(int index,Object obj):在指定位置添加元素。

              B:删除功能

              Object  remove(intindex):根绝索引删除元素,返回被删除的元素。

              C:获取功能

                Object     get(int index) : 获取指定位置的元素

              D:迭代器功能

                     ListIteratorlistIterator(): List集合特有的迭代器。

              E:修改功能

               Object   set(intindex,Object obj) :根据索引修改元素,返回被修改的元素。

       G:元素索引功能:

           Int  indexOf(Object o):

           返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回—1;

       (3)List集合的特有遍历功能

              A:size()get()结合。

              B:代码演示

                           

        //创建集合对象
                                   Listlist = new ArrayList();
                                  
                                   //创建并添加元素
                                   list.add("hello");
                                   list.add("world");
                                   list.add("java");
                                  
                                   //遍历集合
                                   Iteratorit = list.iterator();
                                   while(it.hasNext()){
                                          Strings =(String) it.next();
                                          System.out.println(s);
                                   }
                                   System.out.println("----------");
                                  
                                   for(intx=0; x<list.size(); x++) {
                                          Strings =(String) list.get(x);
                                          System.out.println(s);
                                   }

       (4)列表迭代器的特有功能;

              可以逆向遍历,但是要先正向遍历,所以无意义,基本不使用。

          Object   previous():   获取上一个元素。

           Boolean  hasprevious() 判断是否有元素。

       (5)并发修改异常

  /**
    * @param args
    *ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出异常。
    * 产生原因:
    *     迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,所以就报错了,这个错
    *     叫并发修改异常。
    *     其实这个问题描述的是:迭代器遍历元素的时候,通过集合是不能修改元素的。
    * 图和解决?:
    *     A: 迭代器迭代元素,迭代器修改元素
    *            元素是跟在刚才迭代的元素后面的。
    *     B: 集合遍历元素,集合修改元素(普通for)
    *            元素在最后添加的。
    */
   public static void main(String[] args) {
      // TODOAuto-generated method stub
     //创建list 集合对象;
      List list = new ArrayList();
      //添加元素;
      list.add("hello");
      list.add("world");
      list.add("java");
     
      //迭代器的遍历:
//    Iterator it = list.iterator();
//    while(it.hasNext()){
//      
//       String s = (String) it.next();
//       if("world".equals(s))
//       {
//          list.add("javaee");
//       }
//       //System.out.println("list"+list);
//      
//    }
//    //
//    方式1:迭代器迭代元素,迭代器修改元素。
      //而iterator迭代器却没有添加功能,所以我们使用其子接口ListItetator
      ListIterator  lit = list.listIterator();
      while(lit.hasNext()){
         String s = (String) lit.next();
         if("world".equals(s)){
          lit.add("javaee");
         }
           
      }
      //方式2: 集合遍历元素;
      for(int x = 0; x<list.size(); x++){
              String s = (String) list.get(x);
               if("world".equals(s)){
                  list.add("javaeee");
               }
          System.out.println("---------------");     
      }
      System.out.println("list:"+ list);
     
   }

              A:出现的现象

                     迭代器遍历集合,集合修改集合元素

              B:原因

                     迭代器是依赖于集合的,而集合的改变迭代器并不知道。

              C:解决方案

                     a:迭代器遍历,迭代器修改(ListIterator)

                            元素添加在刚才迭代的位置

                     b:集合遍历,集合修改(size()和get())

                            元素添加在集合的末尾

       (6)常见数据结构 

              A:栈 先进后出

              B:队列 先进先出

              C:数组 查询快,增删慢    存储同一种类型的多个元素的容器。有索引,方便我们的获取。    

              D:链表 查询慢,增删快

       (7)List的子类特点(面试题)

              ArrayList

                     底层数据结构是数组,查询快,增删慢。

                     线程不安全,效率高。

              Vector

                     底层数据结构是数组,查询快,增删慢。

                     线程安全,效率低。

              LinkedList

                     底层数据结构是链表,查询慢,增删快。

                     线程不安全,效率高。

                    

              到底使用谁呢?看需求?

              分析:

                     要安全吗?

                            要:Vector(即使要,也不使用这个,后面再说)

                            不要:ArrayList或者LinkedList

                                   查询多;ArrayList

                                   增删多:LinkedList

                                  

              什么都不知道,就用ArrayList。

ArraryList的使用:

1.ArrayList类概述:        

      底层数据结构是数组,查询快,增删慢;

     数据不安全,效率高。

2.ArrayList案例:

ArrayList遍历:

public class ArrayListDemo {
    public static void main(String[] args) {
        // 创建集合对象
        ArrayList array = new ArrayList();
 
        // 创建元素对象,并添加元素
        array.add("hello");
        array.add("world");
        array.add("java");
 
        // 遍历
        Iterator it = array.iterator();
        while (it.hasNext()) {
            String s = (String) it.next();
            System.out.println(s);
        }
 
        System.out.println("-----------");
 
        for (int x = 0; x < array.size(); x++) {
            String s = (String) array.get(x);
            System.out.println(s);
        }
}

ArrayList存储自定义对象并遍历:

/*
 * ArrayList存储自定义对象并遍历
 */
public class ArrayListDemo2 {
    public static void main(String[] args) {
        // 创建集合对象
        ArrayList array = new ArrayList();
 
        // 创建学生对象
        Student s1 = new Student("武松", 30);
        Student s2 = new Student("鲁智深", 40);
        Student s3 = new Student("林冲", 36);
        Student s4 = new Student("杨志", 38);
 
        // 添加元素
        array.add(s1);
        array.add(s2);
        array.add(s3);
        array.add(s4);
 
        // 遍历
        Iterator it = array.iterator();
        while (it.hasNext()) {
            Student s = (Student) it.next();
            System.out.println(s.getName() + "---" + s.getAge());
        }
 
        System.out.println("----------------")

    for (int x = 0; x < array.size(); x++) {
            // ClassCastException 注意,千万要搞清楚类型
            // String s = (String) array.get(x);
            // System.out.println(s);
 
            Student s = (Student) array.get(x);
            System.out.println(s.getName() + "---" + s.getAge());
        }
    }
}

Vector集合使用:

Vector的特有功能:

1:添加功能:

    Public void addElement(Object obj)     --- add()

2:获取功能:

    Public Object  elementAt( int index)    --- get()        

    Public Enumeration elements()        ---Iterator()  iterator()

         Booleann   hasMoreElements()           hasNext()

             Object     nextElement()                next()

JDK升级的原因:

     A:安全

    B:效率

    C:简化书写

LinkedList的使用:

LinkedList的特有功能;

1.       添加功能:

Public voidaddFirst(Object e)

     Publicvoid addLast(Object e)

2.       获取功能:

Public ObjectgerFirst()

Public ObjectgetLast()

3.       删除功能;

     Public Object  removeFirst()  

      Public Object  RemoveLast()

List集合练习:

ArrayList

去除集合中字符串的重复值(字符串的内容相同)

/*
 * 去除集合中字符串的重复值(字符串的内容相同)
 *
 * 分析:1.创建结合对象
 *     2.添加多个字符串元素(包含内容相同)
 *     3.创建新集合
 *     4.遍历旧集合,获取得到每一个元素
 *     5.拿这个元素到新集合去找,看有没有
 *       有:不搭理它
 *       没有:就添加到新集合。
 *     6.遍历集合
 *
*/
public class ArrayListDemo {
    public static void main(String[] args) {
      // 创建集合对象
       ArrayListarray = new ArrayList();
       //添加多个字符串与元素
       array.add("hello");
       array.add("world");
       array.add("java");
       array.add("hello");
       array.add("java");
       array.add("simin");
       array.add("4mouth");
       //创建新的集合
       ArrayListnewArray = new ArrayList();
             // 4.遍历旧集合,获取得到每一个元素
       Iteratorit = array.iterator();
       while(it.hasNext()){
          String  s = (String) it.next();
          //拿到这个元素到新集合去找,看有没有;
          if(!newArray.contains(s)){
             newArray.add(s);
          }
       }
       System.out.println(array);
       //遍历集合:
       for(int x=0; x<newArray.size(); x++){
             String s=(String)    newArray.get(x);
                  System.out.println(s); 
       }
   }
 
}


 

去除集合中字符串的重复值(字符串的内容相同)不创建新的集合

public class ArrayListDemo2 {
  public static void main(String[] args) {
      // 创建集合对象
  ArrayListarray = new ArrayList();
  //添加多个字符串与元素
  array.add("hello");
  array.add("world");
  array.add("java");
  array.add("hello");
  array.add("java");
  array.add("simin");
  array.add("4mouth");
  array.add("world");
  array.add("world");
 
 //   array.remove(2);
  System.out.println(array);
 
  //有选择排序的思想引入,我们可以通过这种思想做这个题目;
  //拿0索引的依次和后面的比较,有就把后面的干掉;
  //同理,拿1索引。。。
  for(int x =0;x<array.size()-1; x++){
  for(int y= x+1; y<array.size();y++){
      if(array.get(x).equals(array.get(y))){
          array.remove(y);
          y--;   //注意:有替位的的现象,有漏网之鱼,要y--;
      }   
  }
  }
 
  //遍历结合
  Iterator  it= array.iterator();
  while(it.hasNext()){
      Strings = (String) it.next();
      System.out.println(s);
  }
 
}
}

去除集合中自定义对象的重复值(对象的成员变量值都相同)

import java.util.ArrayList;
import java.util.Iterator;
 
/*
 * 需求:去除集合中自定义对象的重复值(对象的成员变量值都相同)
 *
 * 我们按照和字符串一样的操作,发现出问题了。
 * 为什么呢?
 *          我们必须思考哪里会出问题?
 *          通过简单的分析,我们知道问题出现在了判断上。
 *          而这个判断功能是集合自己提供的,所以我们如果想很清楚的知道它是如何判断的,就应该去看源码。
 * contains()方法的底层依赖的是equals()方法。
 * 而我们的学生类中没有equals()方法,这个时候,默认使用的是它父亲Object的equals()方法
 * Object()的equals()默认比较的是地址值,所以,它们进去了。因为new的东西,地址值都不同。
 * 按照我们自己的需求,比较成员变量的值,重写equals()即可。
 * 自动生成即可。
 */
public class ArrayListDemo3 {
       publicstatic void main(String[] args) {
              //创建集合对象
              ArrayListarray = new ArrayList();
 
              //创建学生对象
              Students1 = new Student("林青霞", 27);
              Students2 = new Student("林志玲", 40);
              Students3 = new Student("凤姐", 35);
              Students4 = new Student("芙蓉姐姐", 18);
              Students5 = new Student("翠花", 16);
              Students6 = new Student("林青霞", 27);
              Students7 = new Student("林青霞", 18);
 
              //添加元素
              array.add(s1);
              array.add(s2);
              array.add(s3);
              array.add(s4);
              array.add(s5);
              array.add(s6);
              array.add(s7);
 
              //创建新集合
              ArrayListnewArray = new ArrayList();
 
              //遍历旧集合,获取得到每一个元素
              Iteratorit = array.iterator();
              while(it.hasNext()) {
                     Students = (Student) it.next();
 
                     //拿这个元素到新集合去找,看有没有
                     if(!newArray.contains(s)) {
                            newArray.add(s);
                     }
              }
 
              //遍历新集合
              for(int x = 0; x < newArray.size(); x++) {
                     Students = (Student) newArray.get(x);
                     System.out.println(s.getName()+ "---" + s.getAge());
              }
       }
}

LinkedList实现栈结构的集合代码:

 /**
 * 自定义的栈集合
 *
 * @author simi
 * @version  V1.0
 *
 */
public class MyStack {
    private LinkedList link;
   
    public MyStack(){
       link = new LinkedList();
    }
    public void add(Object obj){
       link.addFirst(obj);
    }
    public Object get(){
       //return  link.getFirst();
        return   link.getFirst();
    }
    public boolean isEmpty(){
       return link.isEmpty();
    }
}

泛型概述:

 泛型简介和使用

 * ArrayList存储字符串并遍历;
 *
 * 我们按照正常的写法,结果错了,
 * 为什么了?
 *  因为我们开始存储的时候,存储了String 和 Integer两种类型。
 *   而在遍历的时候,我们把他们都当作string类型处理的,做了转换,所以就报错。
 *   但是呢,在编译期间却没有告诉我们。
 *  集合模仿数组的这种做法,在创建对象的时候明确元素的数据类型,这样就不会再有问题。
 * 
 *  泛型:是一种把类型明确的工作
 *  推迟到创建对象或者调用方法的时候才去明确的特殊类型。参数化类型,把类型当作参数一样的传递。
 *  格式;
 *         <数据类型 > 
 *          此处的数据类型只能是引用类型;
 *   好处:
 *       a:把运行期间的问题提前到了编译期间;
 *       b:避免了强制类型转换
 *       c:优化程序设计,解决了黄色警告线。
 *                
 */
importjava.util.Iterator;
 
public class GenericDemo {
public static void main(String[] args) {
   //看下面这个代码:
    String[]  strArray = new String[3];
    strArray[0] = "hello";
    strArray[1] = "world";
   // strArray[2] = 10;
    
          
  
  
   ArrayList<String>  array = new ArrayList<String>();
  
   array.add("hello");
   array.add("world");
   array.add("java");
   //array. add(new Integer(100));//
// array.add(10);//报错,集合只能存储引用类型,但这是基本类型,jdk5 以后的自动装箱
   //等价于: array.add(Integer.valueOf(10));
   Iterator<String>    it = array.iterator();
   while(it.hasNext()){
      //ClassCastException;
       String  s = it.next();
           
      System.out.println(s);
   }
  
  
  
}

 * ArrayList存储字符串并遍历;
 *
 * 我们按照正常的写法,结果错了,
 * 为什么了?
 *  因为我们开始存储的时候,存储了String 和 Integer两种类型。
 *   而在遍历的时候,我们把他们都当作string类型处理的,做了转换,所以就报错。
 *   但是呢,在编译期间却没有告诉我们。
 *  集合模仿数组的这种做法,在创建对象的时候明确元素的数据类型,这样就不会再有问题。
 * 
 *  泛型:是一种把类型明确的工作
 *  推迟到创建对象或者调用方法的时候才去明确的特殊类型。参数化类型,把类型当作参数一样的传递。
 *  格式;
 *         <数据类型 > 
 *          此处的数据类型只能是引用类型;
 *   好处:
 *       a:把运行期间的问题提前到了编译期间;
 *       b:避免了强制类型转换
 *       c:优化程序设计,解决了黄色警告线。
 *                
 */
importjava.util.Iterator;
 
public class GenericDemo {
public static void main(String[] args) {
   //看下面这个代码:
    String[]  strArray = new String[3];
    strArray[0] = "hello";
    strArray[1] = "world";
   // strArray[2] = 10;
    
   ArrayList<String>  array = new ArrayList<String>();
  
   array.add("hello");
   array.add("world");
   array.add("java");
   //array. add(new Integer(100));//
// array.add(10);//报错,集合只能存储引用类型,但这是基本类型,jdk5 以后的自动装箱
   //等价于: array.add(Integer.valueOf(10));
   Iterator<String>    it = array.iterator();
   while(it.hasNext()){
      //ClassCastException;
       String  s = it.next();
           
      System.out.println(s);
   }
  
}

2.泛型在那些地方使用:

     看API,如果类,接口,抽象类后面跟的有< E> 就说要使用泛型。

   一般来说在集合中使用。

 

泛型提高

早期的时候,我们使用Object来代表任意类型。

向上转型是没有任何问题的,但是在向下转型的时候其实隐含了类型的转换的问题。

也就是说这样的程序其实并不是安全的。所以java在JDK5后引入了泛型,提高程序的安全性。

1.      泛型类:把泛型定义在类上

格式: public  class 类名<泛型类型1,……>

注意:泛型类型必须是引用类型

public class ObjecdtTool<T>{
      private T  obj;
 
   //public T getObj() {
//    return obj;
   //}
   //
   //public void setObj(T obj) {
//    this.obj = obj;
   //}
   //    
      public void  show(T t){
        System.out.println(t);
   }
public class ObjecdtTool<T>{
      private T  obj;
 
   //public T getObj() {
//    return obj;
   //}
   //
   //public void setObj(T obj) {
//    this.obj = obj;
   //}
   //    
      public void  show(T t){
        System.out.println(t);
   }

2.      泛型方法

把泛型定义在方法上

格式:

  Public <泛型类型> 返回类型  方法名(泛型类型)

public class ObjecdtTool{
     
      public<T> void show(T t){
        System.out.println(t);
      }  
}
public class ObjecdtTool{
     
      public<T> void show(T t){
        System.out.println(t);
      }  
}

3.      泛型接口

把泛型定义在接口上

格式:public  interface 接口名<泛型类型1……>

泛型明确的写的时候,前后必须一致。

泛型高级(通配符)

1.      泛型通配符<?>

任意类型,如果没有明确,那么就是Object以及任意的java类了

2.?extends E

 向下限定,E及其子类

3.?Super E

 向上限定,E及其父类

 

JDK5的新特性:自动拆装箱,泛型,增强for,静态导入,可变参数,枚举;

1.增强for;

增强for:for循环的一种

格式:

     For(元素数据类型变量; 数组或者Collection集合){

                 使用变量即可,该变量就是元素。}

好处:简化了编程;

坏处:增强for的目标不能为null;

    如何解决呢?对增强for的目标先进行不为null的判断,然后使用。

     增强for其实是用来替代迭代器的

  ConcurrentModificationException 
If(list != null){
 List<String> list = null;
      For(String s  :  list){
 NullPointerException
         System.out.println(s);}
 }
 
/*
 * ArrayList存储字符串并遍历。要求加入泛型,并用for遍历。
 * a:迭代器
 * b:普通for
 * C:增强for
 *
 *
 */
 
 
public class ArrayListDemo {
public static void main(String[] args) {
   //创建结合独享
   ArrayList<String>  array = new ArrayList<String>();
   //创建并添加元素
   array.add("2015");
   array.add("2yue");
   array.add("14");
  
   //遍历集合
   //迭代器:
   Iterator<String> it = array.iterator();
   while(it.hasNext()){
      String s= it.next();
      System.out.println(s);
   }
   //普通for循环
   for( int x = 0; x<array.size(); x++){
      String s = array.get(x);
      System.out.println(s);
   }
   //增强for
   for(String s : array){
      System.out.println(s);
   }       
}
}

2.   静态导入:

静态导入:

格式; import static 包名……类名.方法名;

可以直接导入到方法的级别 

静态导入的注意事项:

A:方法必须是静态的

B:如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀。由此可见,意义不大,所以一般不用。


3.   可变参数:定义方法的时候不知道该定义多少个参数

格式:

      修饰符  返回值类型( 数据类型…  变量名){

             }

注意:

     这里的变量其实是一个数组

     如果一个方法有可变参数,并且有多个参数,那么可变参数肯定是最后一个。

Arrays工具类中的一个方法:

public static <T> List<T> asList(T... a)

把数组转成集合;

注意事项;

     虽然可以把数组转成集合,但是集合的长度不能改变。

public class ArraysDemo {
  public static void main(String[] args) {
   //定义一个数字;
     String[] strArray= {"hello","world", "java"};
    
// List<String> list =Arrays.asList(strArray);
   List<String> list = Arrays.asList("hello","world");
   //UnsupportedOperationException
   list.add("javaee");
   for(String s: list){
      System.out.println(s);
   }   
}
}

List集合练习:

集合的嵌套遍历:

/ 创建大集合
       ArrayList<ArrayList<Student>>bigArrayList = new ArrayList<ArrayList<Student>>();
// 把第三个班级存储到学生系统中
bigArrayList.add(thirdArrayList);
// 遍历集合
for (ArrayList<Student> array :bigArrayList) {
for(Student s : array) {
     System.out.println(s.getName() + "---" + s.getAge());
 

获取10个1—20之间的随机数,要求不能重复

public class test {
  public static void main(String[] args) {
    //创建产生随机数的对象
    Random r = new Random();
     // 创建一个存储随机数的集合;
    ArrayList<Integer>  array = new ArrayList<Integer>();
     //定义一个统计变量,从0 开始。
     int count = 0 ;
     // 判断统计遍历是否小于10
     while(count< 10){
        //先产生一个随机数
        int number = r.nextInt(20)+1;
            //判断该随机数在集合中是否存在。
          if(!array.contains(number)){
                //如果不存在,统计变量++。
             array.add(number);
             count++;
         }
     }
     //遍历集合
     for(Integer i : array){
       System.out.println(i);
     }
    
}
}

键盘录入多个数据,以0结束,要求在控制台输出这多个数据中的最大值。

public class test2 {
     public static void main(String[] args) {
      //创建键盘录入数据对象;
       Scanner   sc = new Scanner(System.in);
       //键盘录入多个数据,我们不知道多少个,所以用集合存储
       ArrayList<Integer>  array = new ArrayList<Integer>();
       //以0结束,只要录入的数据是0,我就不继续录入数据了。    
        while(true){
           System.out.println("请输入数据:");
           int number = sc.nextInt();
           if( number!=0){
              array.add(number);
           }else{
              break;
           }
        }
        //把集合装成数组
       // public <T> T[]toArray(T[] a)  //i与ii的地址值一样;
        Integer[] i = new Integer[array.size()];
        array.toArray(i);
        
        //Integer[]  ii = array.toArray(i);
        System.out.println(i);
        //System.out.println(ii);
        //对数组排序:
        //public satic void sort(Object[] a)
        Arrays.sort(i);
        //获取该数组中的最大索引值
        System.out.println("数组是:"+arrayToString(i)+"最大值是:"+i[i.length-1]);
           
   }
     public static String arrayToString(Integer[]  i){
        StringBuilder sb =  new StringBuilder();
        sb.append("[");
        for(int x= 0; x<i.length; x++){
           if(x==i.length-1){
              sb.append(i[x]);
           }else{
              sb.append(i[x]).append(",");
           }
        }
        sb.append("]");  
        return  sb.toString();          
     }    
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值