实验2 Java集合和泛型编程(2学时)

实验目的

  1. 掌握Java 集合常用的编程方法。
  2. 掌握Java泛型编程方法。

实验任务

  1. 已知有十六支国家足球队参加世界杯。写一个程序,把这16支球队随机分为4个组。
    要求:使用随机数,16只球队放在List中,4个分组存储在Map<String, List>中,其中第一个参数String是分组号,第二个参数List存放该组的4个球队。
import java.util.*;

public class test1 {
	public static void main(String[] args) {

		List<String> list = new ArrayList<String>();

		list.add(new String("中国"));
		list.add(new String("波兰"));
		list.add(new String("委内瑞拉"));
		list.add(new String("科特迪瓦"));
		list.add(new String("阿根廷"));
		list.add(new String("俄罗斯"));
		list.add(new String("尼日利亚"));
		list.add(new String("韩国"));
		list.add(new String("西班牙"));
		list.add(new String("波多黎各"));
		list.add(new String("伊朗"));
		list.add(new String("突尼斯"));
		list.add(new String("意大利"));
		list.add(new String("塞尔维亚"));
		list.add(new String("菲律宾"));
		list.add(new String("安哥拉"));

		Map<String, List<String>> map = new HashMap<String, List<String>>();

		Random ra = new Random();

		String str;

		for (int i = 1; i < 5; i++) {
			List<String> listi = new ArrayList<String>();
			for (int j = 1; j < 5; j++) {
				str = list.get(ra.nextInt(list.size()));
				listi.add(str);
				list.remove(str);
			}
			map.put("第" + i + "组", listi);
		}

		for (String key : map.keySet()) {
			System.out.println(key + " 队伍为 " + map.get(key));
		}
	}
}
  1. Car类:私有属性:品牌 String brand; 价格 double price; 及其一些方法。
    使用ArrayList存储一些汽车对象,然后根据汽车品牌按字母顺序排序,同一品牌的汽车按照价格从高到底排序。
    要求:分别用Comparable接口与Comparator接口实现。
import java.util.*;

/*
使用Comparable接口实现
 */

class Car implements Comparable<Car> {
	private String brand;
	private double price;

	public Car(String brand, double price) {
		this.brand = brand;
		this.price = price;
	}

	public String getBrand() {
		return brand;
	}

	public double getPrice() {
		return price;
	}

	public String toString() {
		return "[ 品牌:" + brand + ", 价格:" + price + " ]";
	}

	@Override
	public int compareTo(Car anotherCar) {
		// 先比较brand若相同则比较price

		// 比较brand
		int flag = brand.compareTo(anotherCar.getBrand());
		if (flag == 0) {
			// brand相同则比较price
			return (int) (price - anotherCar.getPrice());
		} else {
			// brand不同则不需要比较price
			return flag;
		}
	}
}

public class test2_Comparable {
	public static void main(String[] args) {

		List<Car> carList = new ArrayList<Car>();
		carList.add(new Car("a", 1));
		carList.add(new Car("d", 2));
		carList.add(new Car("a", 9));
		carList.add(new Car("b", 1));
		carList.add(new Car("b", 6));
		carList.add(new Car("k", 3));
		carList.add(new Car("c", 8));
		carList.add(new Car("r", 2));
		carList.add(new Car("c", 3));

		System.out.println("排序前:");
		for (Car car : carList) {
			System.out.println(car);
		}
		System.out.println();

		System.out.println("排序后:");
		Collections.sort(carList);
		for (Car car : carList) {
			System.out.println(car);
		}
	}
}
import java.util.Comparator;

public class test2_CarsComparator implements Comparator<Cars> {

//首先构造一个test2_CarsComparator类实现Comparator接口:
	
	@Override
	public int compare(Cars cars1, Cars cars2) {
		// 先比较brand若相同则比较price

		// 比较brand
		int flag = cars1.getBrand().compareTo(cars2.getBrand());
		if (flag == 0) {
			// brand相同则比较price
			return (int) (cars1.getPrice() - cars2.getPrice());

		} else {
			// brand不同则不需要比较price
			return flag;
		}
	}

}
import java.util.*;

class Cars {
	private String brand;
	private double price;

	public Cars(String brand, double price) {
		this.brand = brand;
		this.price = price;
	}

	public String getBrand() {
		return brand;
	}

	public double getPrice() {
		return price;
	}

	public String toString() {
		return "[ 品牌:" + brand + ", 价格:" + price + " ]";
	}
}

/*
使用Comparator接口实现
 */

public class test2_Comparator {
	public static void main(String[] args) {

		List<Cars> carsList = new ArrayList<Cars>();
		carsList.add(new Cars("a", 1));
		carsList.add(new Cars("d", 2));
		carsList.add(new Cars("a", 9));
		carsList.add(new Cars("b", 1));
		carsList.add(new Cars("b", 6));
		carsList.add(new Cars("k", 3));
		carsList.add(new Cars("c", 8));
		carsList.add(new Cars("r", 2));
		carsList.add(new Cars("c", 3));

		System.out.println("排序前:");
		for (Cars car : carsList) {
			System.out.println(car);
		}
		System.out.println();

		System.out.println("排序后:");
		Collections.sort(carsList, new test2_CarsComparator());
		for (Cars car : carsList) {
			System.out.println(car);
		}
	}
}

  1. 给定一个非空的整数集合,返回其中出现频率前 k 高的元素。
    例如:输入: [1,1,1,2,2,3], k = 2时,输出[1,2];
    要求:输出存储在ArrayList,每个整数频率存储在HashMap<Integer,Integer>中
import java.util.*;

public class test3 {

	public static List<Integer> inputList(int[] nums, int k) {

		List<Integer>[] bucket = new List[nums.length + 1];
		Map<Integer, Integer> map = new HashMap<Integer, Integer>();

		for (int n : nums) {
			map.put(n, map.getOrDefault(n, 0) + 1);//map.getOrDefault()意思就是当Map集合中有这个key时,就使用这个key值,如果没有就使用默认值defaultValue
		}

		// 按照频率放入各个桶内
		for (int key : map.keySet()) {
			int frequency = map.get(key);
			if (bucket[frequency] == null) {
				bucket[frequency] = new ArrayList<>();
			}
			bucket[frequency].add(key);
		}

		List<Integer> outputList = new ArrayList<>();

		for (int i = bucket.length - 1; i >= 0 && outputList.size() < k; i--) {
			if (bucket[i] != null) {
				outputList.addAll(bucket[i]);
			}
		}
		return outputList;
	}

	public static void main(String[] args) {
		int[] nums = {1,1,1,2,2,3};
		int k = 2;
		
		for (Integer i : inputList(nums, k)) {
	        System.out.print(i + " ");
	     }
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值