集合的练习

这篇博客介绍了如何进行随机生成球队的练习,涵盖了相关算法和实现细节。
摘要由CSDN通过智能技术生成
ArrayDeque 类
  特点: 
	1.基于数组的双端队列的实现
	2.增加删除的效率低,查询和修改的效率高
		  
LinkedList
  特点:
	1.底层是基于链表的双端队列
	2.增加删除的效率高,查询和修改的效率低
	3.同时也实现了List接口
		   
使用LinkedList模拟栈结构和队列结构
package com.sxt.listsondemo;

import java.util.ArrayDeque;
import java.util.LinkedList;

public class ArrayDequeLinkedListDemo {
	public static void main(String[] args) {
		ArrayDeque ad = new ArrayDeque();
		
		LinkedList ll = new LinkedList();
	}
}

————————————————————————————
随机生成球队

package com.sxt;

import java.util.ArrayList;
import java.awt.List;

/*	科特迪瓦,阿根廷,澳大利亚,塞尔维亚,荷兰,
		尼日利亚、日本,美国,中国,新西 兰,巴西,
		比利时,韩国,喀麦隆,洪都拉斯,意大利	*/
public class ListWork01 {
	public static void main(String[] args) {
		String[] arr ={"科特迪瓦", "阿根廷", "澳大利亚", "塞尔维亚", "荷兰", "尼日利亚", "日本",
				"美国", "中国", "新西兰", "巴西", "比利时", "韩国", "喀麦隆", "洪都拉斯", "意大利"}; 
		
		ArrayList list = arrToList(arr);
		System.out.println(list);
		
		for (int i = 1; i <= 4; i++) {
			System.out.println();
			System.out.println("第" + i + "组");
			for (int j = 0; j < 4; j++) {
				int randomNum = getRandomNum(0, list.size()-1);
				System.out.print(list.get(randomNum) + " ");
				list.remove(randomNum);
				
			}
		}
	}
	private static ArrayList arrToList(String[] arr) {
		ArrayList list = new ArrayList();
		for (String s : arr) {
			list.add(s);
		}
		return list;
	}
	
	public static int getRandomNum(int start, int end) {
		return (int)(Math.random()*(end - start + 1) + start);
	}
}

————————————————————————————

 三.有如下Student对象,
	private String name;  
	private int age;  
	private int score;  
	private String classNum; 
	其中,classNum 表示学生的班号,例如“class05”。 
	有如下List List list = new ArrayList();
	list.add(new Student(“Tom”, 18, 100, “class05”)); 
	list.add(new Student(“Jerry”, 22, 70, “class04”));
	list.add(new Student(“Owen”, 25, 90, “class05”)); 
	list.add(new Student(“Jim”, 30,80 , “class05”)); 
	list.add(new Student(“Steve”, 28, 66, “class06”));
	list.add(new Student(“Kevin”, 24, 100, “class04”));
	在这个list 的基础上,完成下列要求: 
	1) 计算所有学生的平均年龄
	2) 计算各个班级的平均分 

package com.sxt.practice;

import java.util.ArrayList;
import java.util.List;


public class Practice02 {
	public static void main(String[] args) {
		List list = new ArrayList();
		list.add(new Student("Tom", 18, 100.0, "class05"));
		list.add(new Student("Jerry", 22, 70.0, "class04"));
		list.add(new Student("Owen", 25, 90.0, "class05"));
		list.add(new Student("Jim", 30, 80.0, "class05"));
		list.add(new Student("Steve", 28, 66.0, "class06"));
		list.add(new Student("Kevin", 24, 100.0, "class04"));
		
		int sumAge = 0;
		double sum04 = 0.0; 
		double sum05 = 0.0; 
		double sum06 = 0.0; 
		
		int count04 = 0;
		int count05 = 0;
		int count06 = 0;
		// 判断每个班级再来求平均分
		for (Object object : list) {
			if (object instanceof Student) {
				Student s = (Student) object;
				Integer age = s.getAge();
				sumAge += age;
				String classNum = s.getClassNum();
				if (classNum.equals("class04")) {
					sum04 += s.getScore();
					count04++;
				} else if (classNum.equals("class05")) {
					sum05 += s.getScore();
					count05++;
				} else if (classNum.equals("class06")) {
					sum06 += s.getScore();
					count06++;
				}
			}
		}
		
		System.out.println("所有学生的平均年龄是: " + sumAge / list.size());
		System.out.println("class04的平均分是: " + sum04/count04);
		System.out.println("class05的平均分是: " + sum05/count05);
		System.out.println("class06的平均分是: " + sum06/count06);
		
	}
}

class Student {
	private String name;
	private Integer age;
	private Double score;
	private String classNum;
	public Student() {
		super();
	}
	public Student(String name, Integer age, Double score, String classNum) {
		super();
		this.name = name;
		this.age = age;
		this.score = score;
		this.classNum = classNum;
	}
	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 String getClassNum() {
		return classNum;
	}
	public void setClassNum(String classNum) {
		this.classNum = classNum;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + ", score=" + score + ", classNum=" + classNum + ", getName()="
				+ getName() + ", getAge()=" + getAge() + ", getScore()=" + getScore() + ", getClassNum()="
				+ getClassNum() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()="
				+ super.toString() + "]";
	}
	
}

————————————————————————————

四.(List)已知有一个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方法。
	使用 至少六种方式遍历 集合
	6) 存储重复元素并且去除 (使用两种方式)
 

package com.sxt.practice;

import java.util.ArrayList;
import java.util.List;

public class Practice03 {
	public static void main(String[] args) {
		List list = new ArrayList();
		// 1) 创建一个List,在List 中增加三个工人
		list.add(new Worker("zhang3", 18, 3000.0));
		list.add(new Worker("li4", 25, 3500.0));
		list.add(new Worker("wang5", 22, 3200.0));
		System.out.println(list);
		// 2) 在li4 之前插入一个工人,信息为:姓名:zhao6,年龄:24,工资3300
		list.add(1, new Worker("zhao6", 24, 3300.0));
		System.out.println(list);

		// 通过名字找出Worker对象,删除之
		// for (Object object : list) {
		// if (object instanceof Worker) {
		// Worker w = (Worker) object;
		// String name = w.getName();
		// if (name.equals("wang5")) {
		// list.remove(object);
		// }
		// }
		// }

		for (int i = 0; i < list.size(); i++) {
			Object object = list.get(i);
			if (object instanceof Worker) {
				Worker w = (Worker) object;
				String name = w.getName();
				if (name.equals("wang5")) {
					list.remove(object);
				}
			}
		}
		System.out.println(list);

		// 5) 利用迭代遍历,对List中所有的工人调用work方法。
		for (Object object : list) {
			if (object instanceof Worker) {
				Worker w = (Worker) object;
				w.work();
			}
		}
		
		// 6) 存储重复元素并且去除 (使用两种方式)
		list.add(new Worker("li4", 25, 3500.0));
		
		for (int i = 0; i < list.size() - 1; i++) {
			for (int j = i+1; j < list.size(); j++) {
				if (list.get(i).equals(list.get(j))) {
					list.remove(j);
					j--;
				}
			}
		}
		System.out.println(list);
		
	}
}

class Worker {
	private String name;
	private Integer age;
	private Double salary;

	public Worker() {
		super();
	}

	public Worker(String name, Integer age, Double salary) {
		super();
		this.name = name;
		this.age = age;
		this.salary = salary;
	}

	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 getSalary() {
		return salary;
	}

	public void setSalary(Double salary) {
		this.salary = salary;
	}

	@Override
	public String toString() {
		return "Worker [name=" + name + ", age=" + age + ", salary=" + salary + "]";
	}

	public void work() {
		System.out.println(name + "work");
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Worker other = (Worker) obj;
		if (age == null) {
			if (other.age != null)
				return false;
		} else if (!age.equals(other.age))
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		if (salary == null) {
			if (other.salary != null)
				return false;
		} else if (!salary.equals(other.salary))
			return false;
		return true;
	}
	
}

————————————————————————————

  五.自己封装一个MyStack 类,底层利用LinkedList实现,表示“栈”
  这种数据结构。
	栈在表示上,就如同一个单向开口的盒子,每当有新数据进入时,
	都是进入栈顶。其基 本操作为push 和pop。
	push 表示把一个元素加入栈顶,pop 表示把栈顶元素弹出。
	栈的特点:先进后出。
	封装的MyStack必须具备如下方法:
	1) push(Object o):表示把元素放入栈
	2) Object pop():返回栈顶元素,并把该元素从栈中删除。
	如果栈为空,则返回 null 值
	3) Object peek():返回栈顶元素,但不把该元素删除。
	如果栈为空,则返回null值。
	4) boolean isEmpty():判断该栈是否为空
	5) int size():返回该栈中元素的数量
	要求:
	6) 编写测试类测试使用MyStack存储元素和遍历元素
package com.sxt.practice;

import java.util.AbstractCollection;
import java.util.EmptyStackException;
import java.util.Iterator;
import java.util.LinkedList;

public class Practice04 {
	public static void main(String[] args) {
		MyStack ms = new MyStack();
		ms.push("A");
		ms.push("B");
		ms.push("C");
		
//		System.out.println(ms.pop());
//		System.out.println(ms.pop());
//		System.out.println(ms.pop());
//		System.out.println(ms.pop());
		
//		while (!ms.isEmpty()) {
//			System.out.println(ms.pop());
//		}
		
		System.out.println(ms.toString());
		System.out.println(ms.peek());
		ms.pop();
		System.out.println(ms.peek());
		
	}
}

class MyStack extends AbstractCollection {
	private LinkedList list;

	public MyStack() {
		list = new LinkedList();
	}
	
	public Object push(Object item) {
		list.addFirst(item);
		return item;
    }
	
	public Object pop() {
		Object obj = null;
		try {
			obj = list.removeFirst();
		} catch (Exception e) {
			throw new EmptyStackException();
		}
        return obj;
    }
	
	public Object peek() {
        if (isEmpty())
            throw new EmptyStackException();
        return list.peekFirst();
    }
	
	public boolean isEmpty() {
		return list.isEmpty();
	}
	
	public int size() {
		return list.size();
	}
	
	@Override
	public Iterator iterator() {
		return list.iterator();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值