实验目的
- 掌握Java 集合常用的编程方法。
- 掌握Java泛型编程方法。
实验任务
- 已知有十六支国家足球队参加世界杯。写一个程序,把这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));
}
}
}
- Car类:私有属性:品牌 String brand; 价格 double price; 及其一些方法。
使用ArrayList存储一些汽车对象,然后根据汽车品牌按字母顺序排序,同一品牌的汽车按照价格从高到底排序。
要求:分别用Comparable接口与Comparator接口实现。
import java.util.*;
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) {
int flag = brand.compareTo(anotherCar.getBrand());
if (flag == 0) {
return (int) (price - anotherCar.getPrice());
} else {
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> {
@Override
public int compare(Cars cars1, Cars cars2) {
int flag = cars1.getBrand().compareTo(cars2.getBrand());
if (flag == 0) {
return (int) (cars1.getPrice() - cars2.getPrice());
} else {
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 + " ]";
}
}
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);
}
}
}
- 给定一个非空的整数集合,返回其中出现频率前 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);
}
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 + " ");
}
}
}