java list 泛型 子类_java基础学习_集合类02_List的子类、泛型、增强for循环、静态导入、可变参数_day16总结...

=============================================================================

=============================================================================

涉及到的知识点有:

1:List的子类(掌握)

(1)List的子类特点

(2)ArrayList类

(3)Vector类

(4)LinkedList类

(5)案例

2:泛型(掌握)

(1)泛型的概述

(2)泛型的格式

(3)泛型的好处

(4)泛型的前世今生

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

3:增强for循环(掌握)

4:静态导入(了解)

(1)静态导入的概述

(2)静态导入的格式

(3)注意事项

5:可变参数(掌握)

(1)可变参数的概述

(2)可变参数的格式

(3)注意事项

(4)Arrays工具类中的一个方法

6:练习(掌握)

A:集合的嵌套遍历

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

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

7:要掌握的代码

=============================================================================

=============================================================================

1:List的子类(掌握)

(1)List的子类特点

ArrayList:

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

线程不安全,效率高

Vector:

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

线程安全,效率低

LinkedList:

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

线程不安全,效率高

(2)ArrayList类

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

B:案例

a:ArrayList存储字符串并遍历

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

(3)Vector类

A:有特有功能

a:添加功能

public void addElement(E obj)       --add()

b:获取功能

public E elementAt(int index)         --get()

public Enumeration elements()  -- Iterator iterator()

抽象方法:

boolean hasMoreElements()  --hasNext()

Object nextElement()       --next()

JDK升级的原因:

A:提高安全

B:提高效率

C:简化书写

B:案例

a:Vector存储字符串并遍历

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

(4)LinkedList类

A:有特有功能

a:添加功能

public void addFirst(Object e) 在最前面添加

public void addLast(Object e) 在最后面添加(该功能意义不大)

b:删除功能

public Object removeFirst()

public Object removeLast()

c:获取功能

public Object getFirst()

public Obejct getLast()

B:案例

a:LinkedList存储字符串并遍历

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

(5)案例

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

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

法一:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecn.itcast_04;2

3 importjava.util.ArrayList;4 importjava.util.Iterator;5

6 /*

7 * ArrayList去除集合中字符串的重复值(字符串的内容相同)8 *9 * 分析:10 * A:创建集合对象11 * B:添加多个字符串元素(包含内容相同的)12 * C:创建新集合13 * D:遍历旧集合,获取得到每一个元素14 * E:拿这个元素到新集合去找,看有没有15 * 有:不搭理它16 * 没有:就添加到新集合17 * F:遍历新集合18 */

19 public classArrayListDemo {20 public static voidmain(String[] args) {21 //创建集合对象

22 ArrayList array = newArrayList();23

24 //添加多个字符串元素(包含内容相同的)

25 array.add("hello");26 array.add("world");27 array.add("java");28 array.add("world");29 array.add("java");30 array.add("world");31 array.add("world");32 array.add("world");33 array.add("world");34 array.add("java");35 array.add("world");36

37 //创建新集合

38 ArrayList newArray = newArrayList();39

40 //遍历旧集合,获取得到每一个元素

41 Iterator it =array.iterator();42 while(it.hasNext()) {43 String s =(String) it.next();44

45 //拿这个元素到新集合去找,看有没有

46 if (!newArray.contains(s)) {47 newArray.add(s);48 }49 }50

51 //遍历新集合

52 for (int x = 0; x < newArray.size(); x++) {53 String s =(String) newArray.get(x);54 System.out.println(s);55 }56 }57

58 }

ArrayListDemo.java

法二(不常用):

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecn.itcast_04;2

3 importjava.util.ArrayList;4 importjava.util.Iterator;5

6 /*

7 * 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)8 * 要求:不能创建新的集合,就在以前的集合上做。9 */

10 public classArrayListDemo2 {11 public static voidmain(String[] args) {12 //创建集合对象

13 ArrayList array = newArrayList();14

15 //添加多个字符串元素(包含内容相同的)

16 array.add("hello");17 array.add("world");18 array.add("java");19 array.add("world");20 array.add("java");21 array.add("world");22 array.add("world");23 array.add("world");24 array.add("world");25 array.add("java");26 array.add("world");27

28 //由选择排序思想引入,我们就可以通过这种思想做这个题目29 //拿0索引的依次和后面的比较,有就把后的干掉30 //同理,拿1索引...31 //因为ArrayList底层数据结构是数组,而数组查询快,增删慢

32 for (int x = 0; x < array.size() - 1; x++) {33 for (int y = x + 1; y < array.size(); y++) {34 if(array.get(x).equals(array.get(y))) {35 array.remove(y); //因为你删一个的同时,剩下的数组会挤上去一个,而挤上的这一个没有判断

36 y--; //所以我要再回去比较一下

37 }38 }39 }40

41 //遍历集合

42 Iterator it =array.iterator();43 while(it.hasNext()) {44 String s =(String) it.next();45 System.out.println(s);46 }47 }48 }

ArrayListDemo2.java

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

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecn.itcast_04;2

3 importjava.util.ArrayList;4 importjava.util.Iterator;5

6 /*

7 * 需求:去除集合中自定义对象的重复值(对象的成员变量值都相同)8 *9 * 我们按照和字符串一样的操作,发现出问题了。10 * 为什么呢?11 * 我们必须思考哪里会出问题?12 * 通过简单的分析,我们知道问题出现在了判断上。13 * 而这个判断功能是集合自己提供的,所以我们如果想很清楚的知道它是如何判断的,就应该去看源码。14 * contains()方法的底层依赖的是equals()方法。15 * 而我们的学生类中没有equals()方法,这个时候,默认使用的是它父亲Object的equals()方法。16 * Object()的equals()默认比较的是地址值,所以,它们进去了。因为new的东西,地址值都不同。17 * 按照我们自己的需求,比较成员变量的值,重写equals()即可。18 * 自动生成即可。19 */

20 public classArrayListDemo3 {21 public static voidmain(String[] args) {22 //创建集合对象

23 ArrayList array = newArrayList();24

25 //创建学生对象

26 Student s1 = new Student("林青霞", 27);27 Student s2 = new Student("林志玲", 40);28 Student s3 = new Student("凤姐", 35);29 Student s4 = new Student("芙蓉姐姐", 18);30 Student s5 = new Student("翠花", 16);31 Student s6 = new Student("林青霞", 27);32 Student s7 = new Student("林青霞", 18);33

34 //添加元素到集合

35 array.add(s1);36 array.add(s2);37 array.add(s3);38 array.add(s4);39 array.add(s5);40 array.add(s6);41 array.add(s7);42

43 //创建新集合

44 ArrayList newArray = newArrayList();45

46 //遍历旧集合,获取得到每一个元素

47 Iterator it =array.iterator();48 while(it.hasNext()) {49 Student s =(Student) it.next();50

51 //拿这个元素到新集合去找,看有没有

52 if (!newArray.contains(s)) {53 newArray.add(s);54 }55 }56

57 //遍历新集合

58 for (int x = 0; x < newArray.size(); x++) {59 Student s =(Student) newArray.get(x);60 System.out.println(s.getName() + "---" +s.getAge());61 }62 }63 }

ArrayListDemo3.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecn.itcast_04;2

3 public classStudent {4 privateString name;5 private intage;6

7 publicStudent() {8 super();9 }10

11 public Student(String name, intage) {12 super();13 this.name =name;14 this.age =age;15 }16

17 publicString getName() {18 returnname;19 }20

21 public voidsetName(String name) {22 this.name =name;23 }24

25 public intgetAge() {26 returnage;27 }28

29 public void setAge(intage) {30 this.age =age;31 }32

33 @Override34 public booleanequals(Object obj) {35 if (this ==obj)36 return true;37 if (obj == null)38 return false;39 if (getClass() !=obj.getClass())40 return false;41 Student other =(Student) obj;42 if (age !=other.age)43 return false;44 if (name == null) {45 if (other.name != null)46 return false;47 } else if (!name.equals(other.name))48 return false;49 return true;50 }51

52 }

Student.java

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

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

这样做的好处是:我们用自己的方法,让外界不知道我们用的是谁.

packagecn.itcast_05;importjava.util.LinkedList;/*** 自定义的栈集合

*

*@author风清扬

*@versionV1.0*/

public classMyStack {privateLinkedList link;publicMyStack() {

link= newLinkedList();

}public voidadd(Object obj) {

link.addFirst(obj);

}publicObject get() {//return link.getFirst();

return link.removeFirst(); //移除第一个元素并返回被移除的元素,其余的元素自动向上挤

}public booleanisEmpty() {returnlink.isEmpty();

}

}

packagecn.itcast_05;/** MyStack的测试*/

public classMyStackDemo {public static voidmain(String[] args) {//创建集合对象

MyStack ms = newMyStack();//添加元素,底层调用的是addFirst(obj);

ms.add("hello"); //第一个进来,压栈,最里面

ms.add("world"); //第二个进来,压栈

ms.add("java"); //第三个进来,压栈//改进前//改进后//System.out.println(ms.get());//java java//System.out.println(ms.get());//java world//System.out.println(ms.get());//java hello//NoSuchElementException//System.out.println(ms.get()); 异常

while (!ms.isEmpty()) {

System.out.println(ms.get());

}

}

}

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

2:泛型(掌握)

(1)泛型的概述

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

(2)泛型的格式

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

(3)泛型的好处

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

B:避免了强制类型转换

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

(4)泛型的前世今生

A:泛型的由来

早期的Object类型可以接收任意的对象类型,但是在实际的使用中,向上转型是没有任何问题的,但是在向下转型的时候其实隐含了类型转换的问题。

也就存在这隐患,所以Java在JDK1.5以后就提供了泛型来解决这个安全问题,提高程序的安全性。

B:泛型类

把泛型定义在类上

格式:public class 类名

注意:泛型类型必须是引用数据类型。因为仅仅表示一个参数,所以符合我们命名的标识符规则就行。

public class ObjectTool {...}

C:泛型方法

把泛型定义在方法上

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

注意:方法能接收任意类型的参数

public void show(T t) {...}

D:泛型接口

把泛型定义在接口上

格式:public interface 接口名

注意:把泛型定义在接口上,该接口的实现类是实现的那一刻就知道类型的(不常见),还是以后用的时候才知道类型的(常见)。

public class InterImpl implements Inter {...}

1fab1c165da49124cbe17926d0641d9e.png

E:泛型高级通配符

?      任意类型,如果没有明确,那么就是Object以及任意的Java类了(泛型如果明确地写的时候,前后必须一致)

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

? super E  向上限定,E及其父类

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecn.itcast_07;2

3 importjava.util.ArrayList;4 importjava.util.Collection;5

6 /*

7 * 泛型高级(通配符)8 * ? 任意类型,如果没有明确,那么就是Object以及任意的Java类了9 * ? extends E 向下限定,E及其子类10 * ? super E 向上限定,E及其父类11 */

12 public classGenericDemo {13 public static voidmain(String[] args) {14 //泛型如果明确地写的时候,前后必须一致

15 Collection c1 = new ArrayList();16 //Collection c2 = new ArrayList();//编译报错17 //Collection c3 = new ArrayList();//编译报错18 //Collection c4 = new ArrayList();//编译报错19

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

21 Collection> c5 = new ArrayList();22 Collection> c6 = new ArrayList();23 Collection> c7 = new ArrayList();24 Collection> c8 = new ArrayList();25

26 //? extends E 向下限定,E及其子类27 //Collection extends Animal> c9 = new ArrayList();//编译报错

28 Collection extends Animal> c10 = new ArrayList();29 Collection extends Animal> c11 = new ArrayList();30 Collection extends Animal> c12 = new ArrayList();31

32 //? super E 向上限定,E及其父类

33 Collection super Animal> c13 = new ArrayList();34 Collection super Animal> c14 = new ArrayList();35 //Collection super Animal> c15 = new ArrayList();//编译报错36 //Collection super Animal> c16 = new ArrayList();//编译报错

37 }38 }39

40 classAnimal {41 }42

43 class Dog extendsAnimal {44 }45

46 class Cat extendsAnimal {47 }

GenericDemo.java

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

看API,如果类、接口、抽象类的后面跟有就说要使用泛型。一般来说就是在集合中使用。

// JDK7的新特性:泛型推断。

// ArrayList array = new ArrayList<>();

// 但是我不建议这样使用。

ArrayList array = new ArrayList();

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

3:增强for循环(掌握)

(1)是for循环的一种。增强for是用来替迭代器。

(2)格式

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

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

}

(3)好处

简化了数组和集合的遍历。

(4)弊端

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

即:对增强for的目标先进行不为null的判断,然后再使用。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecn.itcast_01;2

3 importjava.util.ArrayList;4 importjava.util.List;5

6 /*

7 * JDK5的新特性:自动拆装箱、泛型、增强for、静态导入、可变参数、枚举8 *9 * 增强for:是for循环的一种。10 *11 * 格式:12 * for (元素数据类型 变量 : 数组或者Collection集合) {13 * 使用变量即可,该变量就是元素14 * }15 *16 * 好处:简化了数组和集合的遍历。17 *18 * 弊端: 增强for的目标不能为null。19 * 如何解决呢?对增强for的目标先进行不为null的判断,然后再使用。20 */

21 public classForDemo {22 public static voidmain(String[] args) {23 //定义一个int数组

24 int[] arr = { 1, 2, 3, 4, 5};25 for (int x = 0; x < arr.length; x++) {26 System.out.println(arr[x]);27 }28 System.out.println("---------------");29 //增强for

30 for (intx : arr) {31 System.out.println(x);32 }33 System.out.println("---------------");34 //定义一个字符串数组

35 String[] strArray = { "林青霞", "风清扬", "东方不败", "刘意"};36 //增强for

37 for(String s : strArray) {38 System.out.println(s);39 }40 System.out.println("---------------");41 //定义一个集合

42 ArrayList array = new ArrayList();43 array.add("hello");44 array.add("world");45 array.add("java");46 //增强for

47 for(String s : array) {48 System.out.println(s);49 }50 System.out.println("---------------");51

52 List list = null;53 //NullPointerException54 //这个s是我们从list里面获取出来的,在获取前,它肯定还要做一个判断55 //说白了,这就是迭代器的功能

56 if (list != null) {57 for(String s : list) {58 System.out.println(s);59 }60 }61

62 //增强for其实是用来替代迭代器的63 //ConcurrentModificationException64 //for (String s : array) {65 //if ("world".equals(s)) {66 //array.add("javaee");67 //}68 //}69 //System.out.println("array:" + array);

70 }71 }

ForDemo.java

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

4:静态导入(了解)

(1)静态导入的概述

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

(2)静态导入的格式

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

(3)注意事项

A:被导入的方法必须是静态的

B:如果有多个类下有同名的静态方法,就不好区分了,必须加上前缀才能导入。

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecn.itcast_03;2

3 /*

4 * 可变参数:定义方法的时候不知道该定义多少个参数5 * 格式:6 * 修饰符 返回值类型 方法名(数据类型… 变量名){7 *8 * }9 *10 * 注意:11 * 这里的变量其实是一个数组12 * 如果一个方法有可变参数,并且有多个参数,那么,可变参数的位置肯定是在最后13 */

14 public classArgsDemo {15 public static voidmain(String[] args) {16 //2个数据求和

17 int a = 10;18 int b = 20;19 int result =sum(a, b);20 System.out.println("result:" + result); //3021

22 //3个数据的求和

23 int c = 30;24 result =sum(a, b, c);25 System.out.println("result:" + result); //6026

27 //4个数据的求和

28 int d = 30;29 result =sum(a, b, c, d);30 System.out.println("result:" + result); //9031

32 //需求:我要写一个求和的功能,到底是几个数据求和呢,我不太清楚,但是我知道在调用的时候我肯定就知道了。33 //为了解决这个问题,Java就提供了一个东西:可变参数

34 result = sum(a, b, c, d, 40);35 System.out.println("result:" + result); //130

36

37 result = sum(a, b, c, d, 40, 50);38 System.out.println("result:" + result); //180

39 }40

41 public static int sum(int... a) {42 //System.out.println(a);//[I@1f297e743 //return 0;

44

45 int s = 0;46

47 for (intx : a) {48 s +=x;49 }50

51 returns;52 }53

54 //public static int sum(int a, int b, int c, int d) {55 //return a + b + c + d;56 //}57 //

58 //public static int sum(int a, int b, int c) {59 //return a + b + c;60 //}61 //

62 //public static int sum(int a, int b) {63 //return a + b;64 //}

65 }

ArgsDemo.java

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

5:可变参数(掌握)

(1)可变参数的概述

如果我们在写方法的时候,参数个数不明确,就应该定义可变参数。

(2)可变参数的格式

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

}

public static int sum(int... a) {

}

(3)注意事项

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

(4)Arrays工具类中的一个方法

public static List asList(T... a) 把数组转成集合

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

因为这个集合的本质是数组。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecn.itcast_03;2

3 importjava.util.Arrays;4 importjava.util.List;5

6 /*

7 * Arrays工具类中的一个方法8 * public static List asList(T... a) 把数组转成集合9 *10 * 注意事项:11 * 虽然可以把数组转成集合,但是集合的长度不能改变。12 */

13 public classArraysDemo {14 public static voidmain(String[] args) {15 //定义一个数组16 //String[] strArray = { "hello", "world", "java" };17 //List list = Arrays.asList(strArray);

18

19 List list = Arrays.asList("hello", "world", "java");20 //UnsupportedOperationException 不支持的操作异常21 //list.add("javaee");22 //UnsupportedOperationException 不支持的操作异常23 //list.remove(1);

24 list.set(1, "javaee"); //可以修改

25

26 for(String s : list) {27 System.out.println(s);28 }29 }30 }

ArraysDemo.java

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

6:练习(掌握)

A:集合的嵌套遍历

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecn.itcast_01;2

3 public classStudent {4 privateString name;5 private intage;6

7 publicStudent() {8 super();9 }10

11 public Student(String name, intage) {12 super();13 this.name =name;14 this.age =age;15 }16

17 publicString getName() {18 returnname;19 }20

21 public voidsetName(String name) {22 this.name =name;23 }24

25 public intgetAge() {26 returnage;27 }28

29 public void setAge(intage) {30 this.age =age;31 }32

33 }

Student.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecn.itcast_01;2

3 importjava.util.ArrayList;4

5 /*

6 * 集合的嵌套遍历7 * 需求:8 * 我们班有学生,每一个学生是不是一个对象。所以我们可以使用一个集合表示我们班级的学生。ArrayList9 * 但是呢,我们旁边是不是还有班级,每个班级是不是也是一个ArrayList。10 * 而我现在有多个ArrayList。也要用集合存储,怎么办呢?11 * 就是这个样子的:ArrayList>12 */

13 public classArrayListDemo {14 public static voidmain(String[] args) {15 //创建大集合

16 ArrayList> bigArrayList = new ArrayList>();17

18 //创建第一个班级的学生集合

19 ArrayList firstArrayList = new ArrayList();20 //创建学生

21 Student s1 = new Student("唐僧", 30);22 Student s2 = new Student("孙悟空", 29);23 Student s3 = new Student("猪八戒", 28);24 Student s4 = new Student("沙僧", 27);25 Student s5 = new Student("白龙马", 26);26 //学生进班

27 firstArrayList.add(s1);28 firstArrayList.add(s2);29 firstArrayList.add(s3);30 firstArrayList.add(s4);31 firstArrayList.add(s5);32 //把第一个班级存储到学生系统中

33 bigArrayList.add(firstArrayList);34

35 //创建第二个班级的学生集合

36 ArrayList secondArrayList = new ArrayList();37 //创建学生

38 Student s11 = new Student("诸葛亮", 30);39 Student s22 = new Student("司马懿", 28);40 Student s33 = new Student("周瑜", 26);41 //学生进班

42 secondArrayList.add(s11);43 secondArrayList.add(s22);44 secondArrayList.add(s33);45 //把第二个班级存储到学生系统中

46 bigArrayList.add(secondArrayList);47

48 //创建第三个班级的学生集合

49 ArrayList thirdArrayList = new ArrayList();50 //创建学生

51 Student s111 = new Student("宋江", 40);52 Student s222 = new Student("吴用", 35);53 Student s333 = new Student("高俅", 30);54 Student s444 = new Student("李师师", 22);55 //学生进班

56 thirdArrayList.add(s111);57 thirdArrayList.add(s222);58 thirdArrayList.add(s333);59 thirdArrayList.add(s444);60 //把第三个班级存储到学生系统中

61 bigArrayList.add(thirdArrayList);62

63 //遍历集合

64 for (ArrayListarray : bigArrayList) {65 for(Student s : array) {66 System.out.println(s.getName() + "---" +s.getAge());67 }68 }69 }70 }

ArrayListDemo.java

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecn.itcast_02;2

3 importjava.util.ArrayList;4 importjava.util.Random;5

6 /*

7 * 获取10个1-20之间的随机数,要求不能重复8 *9 * 用数组实现,但是数组的长度是固定的。10 * 长度不好确定,所以我们使用集合实现。11 *12 * 分析:13 * A:创建产生随机数的对象。14 * B:创建一个存储随机数的集合。15 * C:定义一个统计变量。从0开始。16 * D:判断统计遍历是否小于1017 * 是:产生一个随机数,判断该随机数在集合中是否存在。18 * 如果不存在:就添加,统计变量++。19 * 如果存在:就不搭理它。20 * 否:不搭理它21 * E:遍历集合22 */

23 public classRandomDemo {24 public static voidmain(String[] args) {25 //创建产生随机数的对象。

26 Random r = newRandom();27

28 //创建一个存储随机数的集合。

29 ArrayList array = new ArrayList();30

31 //定义一个统计变量。从0开始。

32 int count = 0;33

34 //判断统计遍历是否小于10

35 while (count < 10) {36 //产生一个随机数

37 int number = r.nextInt(20) + 1;38

39 //判断该随机数在集合中是否存在。

40 if (!array.contains(number)) {41 //如果不存在:就添加,统计变量++。

42 array.add(number);43 count++;44 }45 }46

47 //遍历集合

48 for(Integer i : array) {49 System.out.println(i);50 }51 }52 }

RandomDemo.java

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecn.itcast_03;2

3 importjava.util.ArrayList;4 importjava.util.Arrays;5 importjava.util.Scanner;6

7 /*

8 * 键盘录入多个数据,以0结束,要求在控制台输出这多个数据中的最大值。9 *10 * 分析:11 * A:创建键盘录入数据对象12 * B:键盘录入多个数据,我们不知道多少个,所以用集合存储13 * C:以0结束,这个简单,只要键盘录入的数据是0,我就不继续录入数据了14 * D:把集合转成数组15 * E:对数组排序16 * F:获取该数组中的最大索引的值17 */

18 public classArrayListDemo {19 public static voidmain(String[] args) {20 //创建键盘录入数据对象

21 Scanner sc = newScanner(System.in);22

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

24 ArrayList array = new ArrayList();25

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

27 while (true) {28 System.out.println("请输入数据:");29 int number =sc.nextInt();30 if (number != 0) {31 array.add(number);32 } else{33 break;34 }35 }36

37 //把集合转成数组38 //public T[] toArray(T[] a)

39 Integer[] i = newInteger[array.size()];40 //Integer[] ii = array.toArray(i);

41 array.toArray(i);42 //System.out.println(i);//[Ljava.lang.Integer;@6cd873743 //System.out.println(ii);//[Ljava.lang.Integer;@6cd873744

45 //对数组排序46 //public static void sort(Object[] a)

47 Arrays.sort(i);48

49 //获取该数组中的最大索引的值

50 System.out.println("数组是:" + arrayToString(i) + "最大值是:" + i[i.length - 1]);51 }52

53 //把数组转换成字符串

54 public staticString arrayToString(Integer[] i) {55 StringBuilder sb = newStringBuilder();56

57 sb.append("[");58 for (int x = 0; x < i.length; x++) {59 if (x == i.length - 1) {60 sb.append(i[x]);61 } else{62 sb.append(i[x]).append(", ");63 }64 }65 sb.append("]");66

67 returnsb.toString();68 }69 }

ArrayListDemo.java

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

7:要掌握的代码

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

=============================================================================

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值