问题一
创建一个List集合对象,然后存入5名学生信息(学生要求包括姓名 年龄 分数),然后根据每个学生的分数调用sort方法对集合中所有的学生进行顺序排列
在这个题目中我运用了
静态成员内部类、
List接口指向ArrayList类(接口实现类)接口的多态、
List接口的add方法(添加元素)、
List接口的sort方法(排序方法)、
在sort方法中运用了匿名内部类对判断器接口Comparator中comparator方法进行重写、
在运用匿名内部类的过程中使用了lambda表达式、
在最后遍历的时候运用了List接口中的size()方法(判断集合中的元素个数)
运用了迭代器Iterator接口,通过List接口中的iterator()方法(实际上调用的是ArrayList集合实现类中的方法)返回一个Itr类型(Iterator接口的实现类)让接口接收
在循环输出的过程中通过hasNext()方法作为是否为集合最后的判断,然后通过next()方法指向下一对象,在next()方法中运用了泛型的思想。
然后在输出的时候看起来是输出一个对象,但是在引用数据类型当中输出对象的引用实际上是输出对象.toString()方法。所以要输出对象中的内容需要重写toString()方法,避免输出的是地址值。
package com.qianfeng.day12;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
public class ListWork01 {
static class Student{
private String name;
private Integer age;
private Double score;
public Student() {
super();
}
public Student(String name, Integer age, Double score) {
super();
this.name = name;
this.age = age;
this.score = score;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", score=" + score + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Double getScore() {
return score;
}
public void setScore(Double score) {
this.score = score;
}
}
public static void main(String[] args) {
List<Student> list = new ArrayList<Student>();
list.add(new Student("张三",18,98.5));
list.add(new Student("李四",21,68.5));
list.add(new Student("王五",20,88.5));
list.add(new Student("赵六",17,100.0));
list.add(new Student("田七",25,55.5));
//方法一匿名内部类
list.sort(new Comparator<Object>() {
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
return (int)(((Student)o1).getScore() - ((Student)o2).getScore());
}
});
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("=================================================");
//方法二lambda表达式
list.sort(
(Object o1,Object o2) -> (int)(((Student)o2).getScore() - ((Student)o1).getScore())
);
//万能迭代器
Iterator<Student> iterator = list.iterator();
while(iterator.hasNext()) {
Object value = iterator.next();
System.out.println(value);
}
}
}
问题二
创建一个List集合,往集合中随机存入1-10之间的每个数,要求每个元素都不能重复
在此题中运用的很多方法跟问题一类似
运用到了Math.random()(产生0-1之间的小数)
contains(Object obj);方法是从Collection接口继承到List接口然后通过ArrayList集合实现类来实现,作用是判断集合对象中是否存在传入对象,如果存在返回true不存在返回false
package com.qianfeng.day12;
import java.util.ArrayList;
import java.util.List;
public class ListWork02 {
public static void main(String[] args) {
//接口的多态实现
List<Integer> list = new ArrayList<Integer>();
int number;
while(list.size() < 10) {
//通过Math.random()方法实现随机数
number = (int)(Math.random()*10+1);
//通过contains()方法判断集合中是否有number对象
//其中有自动装箱
if (!list.contains(number)) {
list.add(number);
}
}
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + "\t");
}
}
}