16. 集合类 (List的子类ArrayList、Vector、LinkedList与JDK 5新特性)

来源:互联网 发布:护目镜软件下载 编辑:程序博客网 时间:2024/06/14 09:46

1:List的子类(掌握)

       (1)List的子类特点

              ArrayList:

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

                     线程不安全,效率高

              Vector:

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

                     线程安全,效率低

              LinkedList:

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

                     线程不安全,效率高

      (2)ArrayList

              A:没有特有功能需要学习

              B:案例

                     a:ArrayList存储字符串并遍历

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

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

public class Student {       privateString name;       privateint age;       publicStudent() {              super();       }       publicStudent(String name, int age) {              super();              this.name= name;              this.age= age;       }       publicString getName() {              returnname;       }       publicvoid setName(String name) {              this.name= name;       }       publicint getAge() {              returnage;       }       publicvoid setAge(int age) {              this.age= age;       } }


public class ArrayListDemo2 {       publicstatic void main(String[] args) {              //创建集合对象              ArrayListarray = new ArrayList();              //创建学生对象              Students1 = new Student("武松",30);              Students2 = new Student("鲁智深",40);              Students3 = new Student("林冲",36);              Students4 = new Student("杨志",38);              //添加元素              array.add(s1);              array.add(s2);              array.add(s3);              array.add(s4);              //遍历              Iteratorit = array.iterator();              while(it.hasNext()) {                     Students = (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);                     Students = (Student) array.get(x);                     System.out.println(s.getName()+ "---" + s.getAge());              }       }}

      (3)Vector

           A:有特有功能

                     a:添加

                            public voidaddElement(E obj)                           --     add()

                     b:获取

                            public EelementAt(int index)                            --     get()

                            publicEnumeration<E> elements()                     -- Iterator  iterator()

boolean hasMoreElements()                        hasNext()

                                  Object nextElement()                                 next()

JDK升级的原因:

 *          A:安全

 *          B:效率

 *          C:简化书写

public class VectorDemo {       publicstatic void main(String[] args) {              //创建集合对象              Vectorv = new Vector();              //添加功能              v.addElement("hello");              v.addElement("world");              v.addElement("java");              //遍历              for(int x = 0; x < v.size(); x++) {                     Strings = (String) v.elementAt(x);                     System.out.println(s);              }              System.out.println("------------------");              Enumerationen = v.elements(); // 返回的是实现类的对象              while(en.hasMoreElements()) {                     Strings = (String) en.nextElement();                     System.out.println(s);              }       }}

              B:案例

                     a:Vector存储字符串并遍历

                     b:Vector存储自定义对象并遍历

      (4)LinkedList

              A:有特有功能      

                     a:添加

                            public voidaddFirst()

                            public voidaddLast()

                     b:删除

                            public ObjectremoveFirst()

                            public ObjectremoveLast()

                     c:获取

                            public ObjectgetFirst()

                            public ObjectgetLast()

public class LinkedListDemo {   publicstatic void main(String[] args) {          //创建集合对象          LinkedListlink = new LinkedList();          //添加元素          link.add("hello");          link.add("world");          link.add("java");          //public void addFirst(Object e)          //link.addFirst("javaee");          //public void addLast(Object e)          //link.addLast("android");          //public Object getFirst()          //System.out.println("getFirst:" + link.getFirst());          //public Obejct getLast()          //System.out.println("getLast:" + link.getLast());          //public Object removeFirst()          System.out.println("removeFirst:"+ link.removeFirst());          //public Object removeLast()          System.out.println("removeLast:"+ link.removeLast());          //输出对象名          System.out.println("link:"+ link);   }}

              B:案例

                     a:LinkedList存储字符串并遍历

                     b:LinkedList存储自定义对象并遍历

(5)案例:

              A:去除集合中的多个字符串的重复元素

                     如果字符串的内容相同,即为重复元素

------------------------------------------------------------------------------------------------------------------------------------------

 * 分析:

 *             A:创建集合对象

 *             B:添加多个字符串元素(包含内容相同的)

 *             C:创建新集合

 *             D:遍历旧集合,获取得到每一个元素

 *             E:拿这个元素到新集合去找,看有没有

 *                    有:不搭理它

 *                    没有:就添加到新集合

 *             F:遍历新集合

 */

public class ArrayListDemo {   publicstatic void main(String[] args) {          //创建集合对象          ArrayListarray = new ArrayList();          //添加多个字符串元素(包含内容相同的)          array.add("hello");          array.add("world");          array.add("java");          array.add("world");          array.add("java");          array.add("world");          array.add("world");          array.add("world");          array.add("world");          array.add("java");          array.add("world");          //创建新集合          ArrayListnewArray = new ArrayList();          //遍历旧集合,获取得到每一个元素          Iteratorit = array.iterator();          while(it.hasNext()) {                 Strings = (String) it.next();                 //拿这个元素到新集合去找,看有没有                 if(!newArray.contains(s)) {                        newArray.add(s);                 }          }          //遍历新集合          for(int x = 0; x < newArray.size(); x++) {                 Strings = (String) newArray.get(x);                 System.out.println(s);          }   }}

* 要求:不能创建新的集合,就在以前的集合上做。

 */

public class ArrayListDemo2 {       publicstatic void main(String[] args) {              //创建集合对象              ArrayListarray = new ArrayList();              //添加多个字符串元素(包含内容相同的)              array.add("hello");              array.add("world");              array.add("java");              array.add("world");              array.add("java");              array.add("world");              array.add("world");              array.add("world");              array.add("world");              array.add("java");              array.add("world");              //由选择排序思想引入,我们就可以通过这种思想做这个题目              //拿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--;                            }                     }              }              //遍历集合              Iteratorit = array.iterator();              while(it.hasNext()) {                     Strings = (String) it.next();                     System.out.println(s);              }       }}

              B:去除集合中的多个自定义对象的重复元素

                     如果自定义对象的成员变量值都相同,即为重复元素

public class Student {       privateString name;       privateint age;       publicStudent() {              super();       }       publicStudent(String name, int age) {              super();              this.name= name;              this.age= age;       }       publicString getName() {              returnname;       }       publicvoid setName(String name) {              this.name= name;       }       publicint getAge() {              returnage;       }       publicvoid setAge(int age) {              this.age= age;       }       @Override       publicboolean equals(Object obj) {              if (this == obj)                     returntrue;              if(obj == null)                     returnfalse;              if(getClass() != obj.getClass())                     returnfalse;              Studentother = (Student) obj;              if(age != other.age)                     returnfalse;              if(name == null) {                     if(other.name != null)                            returnfalse;              }else if (!name.equals(other.name))                     return false;              return true;       }}

* 我们按照和字符串一样的操作,发现出问题了。

 * 为什么呢?

 *             我们必须思考哪里会出问题?

 *             通过简单的分析,我们知道问题出现在了判断上。

 *             而这个判断功能是集合自己提供的,所以我们如果想很清楚的知道它是如何判断的,                                就应该去看源码。

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

              C:LinkedList模拟一个栈数据结构的集合类,并测试。

                     你要定义一个集合类,只不过内部可以使用LinkedList来实现。

 *题目的意思是:

 *           你自己的定义一个集合类,在这个集合类内部可以使用LinkedList模拟。

 */

public class LinkedListDemo {       publicstatic void main(String[] args) {              //A: LinkedList的特有添加功能addFirst()              //B:栈的特点先进后出              //创建集合对象              //LinkedList link = new LinkedList();              //// 添加元素              //link.addFirst("hello");              //link.addFirst("world");              //link.addFirst("java");              //// 遍历              //Iterator it = link.iterator();              //while (it.hasNext()) {              //String s = (String) it.next();              //System.out.println(s);              //}              //为什么呢?       }}

 * 自定义的栈集合

 * @author 风清扬

 * @version V1.0

public class MyStack {   privateLinkedList link;   publicMyStack() {          link= new LinkedList();   }   publicvoid add(Object obj) {          link.addFirst(obj);   }   publicObject get() {          //return link.getFirst();          return link.removeFirst();   }   publicboolean isEmpty() {          return link.isEmpty();   }}

 * MyStack的测试

 */

public class MyStackDemo {       publicstatic void main(String[] args) {              //创建集合对象              MyStackms = new MyStack();              //添加元素              ms.add("hello");              ms.add("world");              ms.add("java");              //System.out.println(ms.get());              //System.out.println(ms.get());              // System.out.println(ms.get());              // NoSuchElementException              //System.out.println(ms.get());              while(!ms.isEmpty()){                     System.out.println(ms.get());              }       }}

2:泛型(掌握)JDK 5新特性)

       (1)泛型概述

              是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。参数化类型,把类型当作参数一样的传递。

       (2)格式:

              <数据类型>

              注意:该数据类型只能是引用类型。

       (3)好处:

              A:把运行时期的问题提前到了编译期间

              B:避免了强制类型转换

              C:优化了程序设计,解决了黄色警告线问题,让程序更安全

public class GenericDemo {       publicstatic void main(String[] args) {              //创建              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 = (String) it.next();                     Strings = it.next();                     System.out.println(s);              }              //看下面这个代码              //String[] strArray = new String[3];              //strArray[0] = "hello";              //strArray[1] = "world";              //strArray[2] = 10;       }}

       (4)泛型的前世今生

              A:泛型的由来

                     Object类型作为任意类型的时候,在向下转型的时候,会隐含一个转型问题

public class ObjectToolDemo {       publicstatic void main(String[] args) {              ObjectToolot = new ObjectTool();              //正常使用              ot.setObj(newInteger(27));              Integeri = (Integer) ot.getObj();              System.out.println("年龄是:" + i);              ot.setObj(newString("林青霞"));              Strings = (String) ot.getObj();              System.out.println("姓名是:" + s);              System.out.println("---------");              ot.setObj(newInteger(30));              //ClassCastException              Stringss = (String) ot.getObj();              System.out.println("姓名是:" + ss);       }}

           B:泛型类

把泛型定义在类上

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

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

           C:泛型方法

把泛型定义在方法上

格式:public <泛型类型>返回类型 方法名(泛型类型 .)

           D:泛型接口

把泛型定义在接口上

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

           E:泛型高级通配符

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

? extends E:           向下限定,E及其子类

? super E:                     向上限定,E极其父类

public class GenericDemo {       publicstatic void main(String[] args) {              //泛型如果明确的写的时候,前后必须一致              Collection<Object>c1 = new ArrayList<Object>();              //Collection<Object> c2 = new ArrayList<Animal>();              //Collection<Object> c3 = new ArrayList<Dog>();              //Collection<Object> c4 = new ArrayList<Cat>();               //?表示任意的类型都是可以的              Collection<?>c5 = new ArrayList<Object>();              Collection<?>c6 = new ArrayList<Animal>();              Collection<?>c7 = new ArrayList<Dog>();              Collection<?>c8 = new ArrayList<Cat>();              //? extends E:向下限定,E及其子类              //Collection<? extends Animal> c9 = new ArrayList<Object>();              Collection<?extends Animal> c10 = new ArrayList<Animal>();              Collection<?extends Animal> c11 = new ArrayList<Dog>();              Collection<?extends Animal> c12 = new ArrayList<Cat>();              //? super E:向上限定,E极其父类              Collection<?super Animal> c13 = new ArrayList<Object>();              Collection<?super Animal> c14 = new ArrayList<Animal>();              //Collection<? super Animal> c15 = new ArrayList<Dog>();              //Collection<? super Animal> c16 = new ArrayList<Cat>();       }}class Animal {}class Dog extends Animal {}class Cat extends Animal {}

       (5)我们在哪里使用呢?

              一般是在集合中使用。

      

3:增强for循环(掌握)JDK 5新特性)

       (1)是for循环的一种

       (2)格式:

              for(元素的数据类型 变量名 : 数组或者Collection集合的对象) {

                     使用该变量即可,该变量其实就是数组或者集合中的元素。

              }

       (3)好处:

              简化了数组和集合的遍历

       (4)弊端

              增强for循环的目标不能为null。建议在使用前,先判断是否为null。

       publicstatic void main(String[] args) {              //定义一个int数组              int[]arr = { 1, 2, 3, 4, 5 };              for(int x = 0; x < arr.length; x++) {                     System.out.println(arr[x]);              }              System.out.println("---------------");              //增强for              for(int x : arr) {                     System.out.println(x);              }              System.out.println("---------------");              //定义一个字符串数组              String[]strArray = { "林青霞", "风清扬", "东方不败","刘意" };              //增强for              for(String s : strArray) {                     System.out.println(s);              }              System.out.println("---------------");              //定义一个集合              ArrayList<String>array = new ArrayList<String>();              array.add("hello");              array.add("world");              array.add("java");              //增强for              for(String s : array) {                     System.out.println(s);              }              System.out.println("---------------");              List<String>list = null;              //NullPointerException              //这个s是我们从list里面获取出来的,在获取前,它肯定还好做一个判断              //说白了,这就是迭代器的功能              if(list != null) {                     for(String s : list) {                            System.out.println(s);                     }              }               //增强for其实是用来替代迭代器的              //ConcurrentModificationException              //for (String s : array) {              //if ("world".equals(s)) {              //array.add("javaee");              //}              //}              //System.out.println("array:" + array);       }}

* ArrayList存储字符串并遍历。要求加入泛型,并用增强for遍历。

 * A:迭代器

 * B:普通for

 * C:增强for

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

 * 增强for是用来替迭代器。

public class ArrayListDemo2 {   publicstatic void main(String[] args) {          //创建集合对象          ArrayList<Student>array = new ArrayList<Student>();          //创建学生对象          Students1 = new Student("林青霞",27);          Students2 = new Student("貂蝉",22);          Students3 = new Student("杨玉环",24);          Students4 = new Student("西施",21);          Students5 = new Student("王昭君",23);          //把学生对象添加到集合中          array.add(s1);          array.add(s2);          array.add(s3);          array.add(s4);          array.add(s5);          //迭代器          Iterator<Student>it = array.iterator();          while(it.hasNext()) {                 Students = it.next();                 System.out.println(s.getName()+ "---" + s.getAge());          }          System.out.println("---------------");          //普通for          for(int x = 0; x < array.size(); x++) {                 Students = array.get(x);                 System.out.println(s.getName()+ "---" + s.getAge());          }          System.out.println("---------------");          //增强for          for(Student s : array) {                 System.out.println(s.getName()+ "---" + s.getAge());          }   }}

public class Student {   //成员变量   privateString name;   privateint age;   //构造方法   publicStudent() {          super();   }   publicStudent(String name, int age) {          super();          this.name= name;          this.age= age;   }   //成员方法   //getXxx()/setXxx()   publicString getName() {          returnname;   }   publicvoid setName(String name) {          this.name= name;   }   publicint getAge() {          returnage;   }   publicvoid setAge(int age) {          this.age= age;   }}

4:静态导入(了解)JDK 5新特性)

       (1)可以导入到方法级别的导入

       (2)格式:

              import static 包名....类名.方法名;

       (3)注意事项:

              A:方法必须是静态的

              B:如果多个类下有同名的方法,就不好区分了,还得加上前缀。

                     所以一般我们并不使用静态导入,但是一定要能够看懂

5:可变参数(掌握)JDK 5新特性)

       (1)定义方法的时候不知道该定义多少个参数,就应该定义可变参数。

       (2)格式:

              修饰符 返回值类型 方法名(数据类型...变量) {}

              注意:

                     A:该变量其实是一个数组名

                     B:如果一个方法有多个参数,并且有可变参数,可变参数必须在最后

public class ArgsDemo {   publicstatic void main(String[] args) {          //2个数据求和          inta = 10;          intb = 20;          intresult = sum(a, b);          System.out.println("result:"+ result);          //3个数据的求和          intc = 30;          result= sum(a, b, c);          System.out.println("result:"+ result);          //4个数据的求和          intd = 30;          result= sum(a, b, c, d);          System.out.println("result:"+ result);          //需求:我要写一个求和的功能,到底是几个数据求和呢,我不太清楚,但是我知道在调用的时候我肯定就知道了          //为了解决这个问题,Java就提供了一个东西:可变参数          result= sum(a, b, c, d, 40);          System.out.println("result:"+ result);          result= sum(a, b, c, d, 40, 50);          System.out.println("result:"+ result);   }   publicstatic int sum(int... a) {          //System.out.println(a);          //return0;          ints = 0;          for(intx : a){                 s+=x;          }          returns;   }   //public static int sum(int a, int b, int c, int d) {   //return a + b + c + d;   //}   //public static int sum(int a, int b, int c) {   //return a + b + c;   //}   //public static int sum(int a, int b) {   //return a + b;   //}}

       (3)Arrays工具类的一个方法

              asList()          把数组转成集合。

注意:虽然可把数组转成集合,但集合的长度不能改变(可修改)。其原因是这个集合的本质还是数组。

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

6:练习(掌握)

       A:集合的嵌套遍历

 * 需求:

 *          我们班有学生,每一个学生是不是一个对象。所以我们可以使用一个集合表示我们班级的学生。ArrayList<Student>

 *          但是呢,我们旁边是不是还有班级,每个班级是不是也是一个ArrayList<Student>。

 *          而我现在有多个ArrayList<Student>。也要用集合存储,怎么办呢?

 *          就是这个样子的:ArrayList<ArrayList<Student>>

public class ArrayListDemo {   publicstatic void main(String[] args) {          //创建大集合          ArrayList<ArrayList<Student>>bigArrayList = new ArrayList<ArrayList<Student>>();          //创建第一个班级的学生集合          ArrayList<Student>firstArrayList = new ArrayList<Student>();          //创建学生          Students1 = new Student("唐僧",30);          Students2 = new Student("孙悟空",29);          Students3 = new Student("猪八戒",28);          Students4 = new Student("沙僧",27);          Students5 = new Student("白龙马",26);          //学生进班          firstArrayList.add(s1);          firstArrayList.add(s2);          firstArrayList.add(s3);          firstArrayList.add(s4);          firstArrayList.add(s5);          //把第一个班级存储到学生系统中          bigArrayList.add(firstArrayList);          //创建第二个班级的学生集合          ArrayList<Student>secondArrayList = new ArrayList<Student>();          //创建学生          Students11 = new Student("诸葛亮",30);          Students22 = new Student("司马懿",28);          Students33 = new Student("周瑜",26);          //学生进班          secondArrayList.add(s11);          secondArrayList.add(s22);          secondArrayList.add(s33);          //把第二个班级存储到学生系统中          bigArrayList.add(secondArrayList);          //创建第三个班级的学生集合          ArrayList<Student>thirdArrayList = new ArrayList<Student>();          //创建学生          Students111 = new Student("宋江",40);          Students222 = new Student("吴用",35);          Students333 = new Student("高俅",30);          Students444 = new Student("李师师",22);          //学生进班          thirdArrayList.add(s111);          thirdArrayList.add(s222);          thirdArrayList.add(s333);          thirdArrayList.add(s444);          //把第三个班级存储到学生系统中          bigArrayList.add(thirdArrayList);          //遍历集合          for(ArrayList<Student> array : bigArrayList) {                 for(Student s : array) {                        System.out.println(s.getName()+ "---" + s.getAge());                 }          }   }}

public class Student {       privateString name;       privateint age;       publicStudent() {              super();       }       publicStudent(String name, int age) {              super();              this.name= name;              this.age= age;       }       publicString getName() {              returnname;       }       publicvoid setName(String name) {              this.name= name;       }       publicint getAge() {              return age;       }       publicvoid setAge(int age) {              this.age= age;       }}

       B:产生101-20之间的随机数,要求随机数不能重复

* 用数组实现,但是数组的长度是固定的,长度不好确定。

 * 所以我们使用集合实现。

 * 分析:

 *          A:创建产生随机数的对象

 *          B:创建一个存储随机数的集合。

 *          C:定义一个统计变量。从0开始。

 *          D:判断统计遍历是否小于10

 *                 是:先产生一个随机数,判断该随机数在集合中是否存在。

 *                               如果不存在:就添加,统计变量++。

 *                               如果存在:就不搭理它。

 *                 否:不搭理它

 *          E:遍历集合

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

       C:键盘录入多个数据,以0结束,并在控制台输出最大值

* 分析:

 *             A:创建键盘录入数据对象

 *             B:键盘录入多个数据,我们不知道多少个,所以用集合存储

 *             C:以0结束,这个简单,只要键盘录入的数据是0,我就不继续录入数据了

 *             D:把集合转成数组

 *             E:对数组排序

 *             F:获取该数组中的最大索引的值

public class ArrayListDemo {   publicstatic void main(String[] args) {          //创建键盘录入数据对象          Scannersc = new Scanner(System.in);          //键盘录入多个数据,我们不知道多少个,所以用集合存储          ArrayList<Integer>array = new ArrayList<Integer>();          //以0结束,这个简单,只要键盘录入的数据是0,我就不继续录入数据了          while(true) {                 System.out.println("请输入数据:");                 intnumber = sc.nextInt();                 if(number != 0) {                        array.add(number);                 }else {                        break;                 }          }          //把集合转成数组          //public <T> T[] toArray(T[] a)          Integer[]i = new Integer[array.size()];          //Integer[] ii = array.toArray(i);          array.toArray(i);          //System.out.println(i);          //System.out.println(ii);          //对数组排序          //public static void sort(Object[] a)          Arrays.sort(i);          //获取该数组中的最大索引的值          System.out.println("数组是:" + arrayToString(i) + "最大值是:"                        +i[i.length - 1]);   }   publicstatic String arrayToString(Integer[] i) {          StringBuildersb = 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();   }}

7:要掌握的代码

       集合存储元素,加入泛型,并可以使用增强for遍历。


阅读全文
0 0