1.已知有一个Worker 类如下:
public class Worker {
private int age;
private String name;
private double salary;
public Worker (){
}
public Worker (String name, int age, double salary){
this.name = name;
this.age = age;
this.salary = salary;
}
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public double getSalary(){ return salary; }
public void setSalary(double salary){ this.salary = salary; }
public void work(){
System.out.println(name + “ work”);
}
}
完成下面的要求
1) 创建一个List,在List 中增加三个工人,基本信息如下:
姓名 年龄 工资
zhang3 18 3000
li4 25 3500
wang5 22 3200
2) 在li4 之前插入一个工人,信息为:姓名:zhao6,年龄:24,工资3300
3) 删除wang5 的信息
4) 利用for 循环遍历,打印List 中所有工人的信息
5) 利用迭代遍历,对List 中所有的工人调用work 方法。
package Java0106.Work; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Code1 { public static void main(String[] args) { //1 创建一个List,在List 中增加三个工人,基本信息如下: // 姓名 年龄 工资 // zhang3 18 3000 // li4 25 3500 // wang5 22 3200 List<Worker> works = new ArrayList<>(); works.add(new Worker("zhang3",18,3000)); works.add(new Worker("li4",25,3500)); works.add(new Worker("wang5",22,3200)); System.out.println(works); //2 在li4 之前插入一个工人,信息为:姓名:zhao6,年龄:24,工资3300 int index = 0; for (int i = 0; i < works.size(); i++) { if (works.get(i).getName().equals("li4")){ index = i; } } System.out.println("liu在集合中的下标"+index); works.add(index,new Worker("zhao6",24,3300)); //插入工人 System.out.println(works); //3 删除wang5 的信息 Iterator<Worker> it = works.iterator(); while (it.hasNext()){ //判断集合中是否有下一个元素 Worker worker = it.next(); //获取下一个元素 if (worker.getName().equals("wang5")){ //判断名字是否相同 it.remove(); //相同则删除,注意只能使用迭代器提供的删除方法,否则删除不成功 } } System.out.println(works); //4 利用for 循环遍历,打印List 中所有工人的信息 此处用的是增强for循环 for (Worker worker:works) { System.out.println(worker); } //5 利用迭代遍历,对List 中所有的工人调用work 方法。 Iterator<Worker> it2 = works.iterator(); while (it2.hasNext()){ Worker worker = it2.next(); worker.work(); } } }
2.去除集合中字符串的重复值(使用 ArrayList)
执行结果如下:
旧集合为:[李玉伟, 李嘉诚, 马化腾, 刘强东, 李玉伟, 王健林, 马云, 雷军]
新集合为:[李玉伟, 李嘉诚, 马化腾, 刘强东, 王健林, 马云, 雷军]
package Java0106.Work; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Code2 { public static void main(String[] args) { String[] strArr = {"李玉伟", "李嘉诚", "马化腾", "刘强东", "李玉伟", "王健林", "马云", "雷军"}; //数组转换集合 List<String> list1 = Arrays.asList(strArr); System.out.println(list1); List<String> list = new ArrayList<>(); list.addAll(list1); //获取集合中每一个元素,与其他元素依次比较,如果相同则删除 for (int i = 0; i < list.size(); i++) { for (int j = i + 1; j <list.size() ; j++) { if ( list.get(i).equals(list.get(j))){ list.remove(j); j--; //如果不j--的话,后面如果有两个相邻的相同元素,则只会删除第一个元素, // 例如删除了第四个位置的元素,第五个元素的位置前移一位成为第四个, // 而下次是从第五个开始查询是否有相同元素的相当于把原来的第五个元素给漏过去了 } } } System.out.println(list); } }
3.分析以下需求,并用代码实现:(使用ArrayList)
(1)生成10个1至100之间的随机整数(不能重复),存入一个List集合
(2)编写方法对List集合进行排序
(2)然后利用迭代器遍历集合元素并输出
(3)如:15 18 20 40 46 60 65 70 75 91
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Code3 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
while (list.size() < 10){
// Math.random() 0-1
int ranNum = (int)(Math.random() * 100 + 1);
if (!list.contains(ranNum)){ // 若当前集合中 不包含该随机数,则添加
list.add(ranNum);
}
}
System.out.println(list);
System.out.println(list.size());
List<Integer> sortList = sortList(list);
System.out.println("排序后:"+sortList);
//然后利用迭代器遍历集合元素并输出
Iterator<Integer> it = sortList.iterator();
while (it.hasNext()){
Integer i = it.next();
System.out.print(i + " ");
}
}
// 编写方法对List集合进行排序 冒泡排序
public static List<Integer> sortList(List<Integer> list){
for (int i = 0; i < list.size() - 1; i++) {
for (int j = 0; j < list.size() - i - 1; j++) {
// 相邻两个元素作比较 判断是否要交换位置
if (list.get(j) > list.get(j + 1)){
int temp = list.get(j);
list.set(j , list.get(j + 1));
list.set(j + 1 , temp);
}
}
System.out.println("第"+ (i + 1) + "次排序结果:" + list);
}
return list;
}
}
4.编写一个类Book,具有name,price,press(出版社),author 然后创建5个对象放入ArrayList中,并实现按照price大小排序,
然后遍历ArrayList输出每个Book对象, 使用toString 方法打印。
public class Book {
private String name ;
private double price ;
private String press ;
private String author ;
public Book() {
}
public Book(String name, double price, String press, String author) {
this.name = name;
this.price = price;
this.press = press;
this.author = author;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", price=" + price +
", press='" + press + '\'' +
", author='" + author + '\'' +
'}';
}
}
import java.util.Comparator;
// 定义 书类型的 比较器
public class BookComparator implements Comparator<Book> {
@Override
public int compare(Book b1, Book b2) {
// 定义比较规则
if (b1.getPrice() > b2.getPrice()){
return 1;
}else if (b1.getPrice() < b2.getPrice()){
return -1;
}
return 0;
}
}
import java.util.ArrayList;
import java.util.List;
public class Code4 {
public static void main(String[] args) {
Book book1 = new Book("凡人修仙传", 100.5 , "人民教育出版社", "忘语");
Book book2 = new Book("斗罗大陆", 80.5 , "人民教育出版社", "唐家三少");
Book book3 = new Book("斗破苍穹", 60.5 , "人民教育出版社", "天蚕土豆");
Book book4 = new Book("吞噬星空", 40.5 , "人民教育出版社", "我吃西红柿");
Book book5 = new Book("诡秘之主", 20.5 , "人民教育出版社", "爱潜水的乌贼");
List<Book> books = new ArrayList<>();
books.add(book1);
books.add(book2);
books.add(book3);
books.add(book4);
books.add(book5);
System.out.println(books);
BookComparator bookComparator = new BookComparator();
books.sort(bookComparator);
System.out.println(books);
System.out.println("--------------------------------------");
for (Book book : books){
System.out.println(book);
}
}
}
5.使用List集合存储10个学生信息。
学生信息:姓名,年龄,成绩。
统计所有姓“张”的同学的平均成绩。
public class Student {
private String name ;
private int age ;
private double score ;
public Student() {
}
public Student(String name, int age, double score) {
this.name = name;
this.age = age;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", score=" + score +
'}';
}
}
import java.util.ArrayList;
import java.util.List;
public class Code5 {
public static void main(String[] args) {
List<Student> studentList = new ArrayList<>();
studentList.add(new Student("张三", 20 , 90) );
studentList.add(new Student("赵三", 23 , 67) );
studentList.add(new Student("李三", 20 , 54) );
studentList.add(new Student("李四", 20 , 87) );
studentList.add(new Student("王五", 20 , 57) );
studentList.add(new Student("张6", 20 , 87) );
studentList.add(new Student("张7", 20 , 34) );
studentList.add(new Student("张8", 20 , 67) );
studentList.add(new Student("王三", 20 , 98) );
studentList.add(new Student("张三", 20 , 80) );
double sumScore = 0; // 姓张的学生总成绩
int index = 0 ;// 姓张的人数
for (int i = 0; i < studentList.size(); i++) {
if (studentList.get(i).getName().startsWith("张")){ //判断是否姓张,是则加一
index ++;
sumScore += studentList.get(i).getScore();
}
}
double avg = sumScore / index ;
System.out.println("平均分:" + avg);
}
}
6.产生10个1-100的随机数,并放到一个数组中,把数组中大于等于10的数字放到一个list集合中,并打印到控制台
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Code6 {
public static void main(String[] args) {
int[] arr = new int[10];
List<Integer> list = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random() * 100 + 1);
if (arr[i] > 10){
list.add(arr[i]);
}
}
System.out.println(Arrays.toString(arr));
System.out.println(list);
}
}