(一)实验目的
1、掌握JAVA集合类中的Collection的特点及其应用情形;
3、掌握Collection、熟悉集合的特点及应用。
(二)实验内容和步骤
1、仿照课堂练习的MyStack示例,使用LinkedList集合类实现一个先进先出的队列数据结构,可以往该结构中压入数据push()以及弹出数据pop(),并遵循先进入先出队的规则。创建该结构,并使用该结构,调用其方法,实现数据存入和取出并显示。
package CollectionClassPractice;
import java.util.LinkedList;
public class MyStackClass {
public static void main(String[] args) {
LinkedList<Integer> queue = new LinkedList<Integer>();
//存入数据
System.out.println("队列元素:");
push(queue, 1); push(queue, 2); push(queue, 3); push(queue, 4); push(queue, 5);
for(int i=0; i<queue.size(); i++)
{
System.out.print(queue.get(i));
System.out.print(' ');
}
System.out.print('\n' + "取出队头元素:");
System.out.print(pop(queue)); System.out.print(' ');
System.out.print(pop(queue));
}
public static int pop(LinkedList<Integer> a)
{
int x = a.getFirst();
a.removeFirst();
return x;
}
public static void push(LinkedList a, int x)
{
a.addLast(x);
}
}
【运行结果】
2、 集合的嵌套遍历:
现在计算机科学与技术系2022届共有5个班级,2个外包班,3个应用班,每个班都有不同的学生,外包1班有5个学生,计算机应用1班有3个学生,计算机应用2班有4个学生.遍历打印年级学生信息。
分析:用集合去存储并且遍历每个学生。最终选择ArrayList去存储
package CollectionClassPractice;
import java.util.ArrayList;
class Student
{
String name;
int age;
public Student(String name, int age)
{
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class StudentClassNestedTraversal {
public static void main(String[] args) {
ArrayList<Student> students = new ArrayList<Student>();
students.add(new Student("外包1班学生1", 18)); students.add(new Student("外包1班学生2", 12));
students.add(new Student("外包1班学生3", 12)); students.add(new Student("外包1班学生4", 12));
students.add(new Student("外包1班学生5", 12));
students.add(new Student("计算机应用1班学生1", 20)); students.add(new Student("计算机应用1班学生2", 20));
students.add(new Student("计算机应用1班学生3", 20));
students.add(new Student("计算机应用2班学生1", 21)); students.add(new Student("计算机应用2班学生2", 21));
students.add(new Student("计算机应用2班学生3", 21)); students.add(new Student("计算机应用2班学生4", 21));
for(Student s: students)
{
System.out.println("学生姓名:"+s.getName()+" 年龄:"+s.getAge());
}
}
}
【运行结果】
3、键盘录入多个整型数据,以-1结束,按格式输出排序后的数据,输入格式要求如下:以逗号分隔整数,如:4,75,234,42,54. 输出排序后的结果为:4, 42, 54, 75, 234 。
- 用正则表达式分割字符串,得到字符串数组: split()方法
- 转换为整型集合:for循环将字符串数组中的元素遍历取出,加入到集合中
- 使用Collections工具类对集合进行排序
- 输出排序后的集合元素
package CollectionClassPractice;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
//4,75,234,42,54,-1
public class Exercise3 {
public static void main(String[] args) {
String s = "4,75,234,42,54,-1";
String a[] = s.split(",");
List<Integer> list = new ArrayList<Integer>();
for(String temp : a)
{
if(temp.equals("-1"))
break;
Integer i = Integer.valueOf(temp);
list.add(i);
}
Collections.sort(list);
for(Integer temp : list)
{
System.out.println(temp);
}
}
}
【运行结果】
4、TreeSet集合存储自定义对象并遍历:如果对象的成员变量值相同即为同一个对象,按照年龄进行从大到小进行排序。分别用自然排序,实现接口Comparator类,内部类三种方法实现
package Tree3KindCompare;
import java.util.Comparator;
import java.util.TreeSet;
class Student implements Comparable<Student> { //自然排序
public String name;
public int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public int compareTo(Student o) { //自然排序
return this.age - o.age;
}
public String toString() { //用于输出,不写就只有地址
return "Student{" + "name='" + name + '\'' + ", age=" + age + '}';
}
}
//实现接口Comparator类
class AgeCompare implements Comparator<Student>{
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
return o1.getAge() - o2.getAge();
}
}
public class TreesetDemo {
public static void main(String[] args) {
//自然排序
TreeSet<Student> tree = new TreeSet<Student>();
tree.add(new Student("张三", 20));
tree.add(new Student("赵六", 23));
tree.add(new Student("李四", 21));
tree.add(new Student("王五", 22));
System.out.println(tree);
System.out.println("------------------------------------");
//实现内部类
TreeSet<Student> tree1 = new TreeSet<Student>(new Comparator<Student>() {
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
return o1.getAge() - o2.getAge();
}
});
tree1.add(new Student("张三", 20));
tree1.add(new Student("赵六", 23));
tree1.add(new Student("李四", 21));
tree1.add(new Student("王五", 22));
System.out.println(tree1);
System.out.println("------------------------------------");
//实现接口Comparator类
TreeSet<Student> tree2 = new TreeSet<Student>(new AgeCompare()); //自定义AgeCompare
tree2.add(new Student("张三", 20));
tree2.add(new Student("赵六", 23));
tree2.add(new Student("李四", 21));
tree2.add(new Student("王五", 22));
System.out.println(tree2);
}
}
【运行结果】
5、"aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)
package MapUsed;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDemo {
public static void main(String[] args) {
String s = "aababcabcdabcde";
Map<Character, Integer> mp = new HashMap<Character, Integer>();
// 遍历字符串s中的每个字符
for (char c : s.toCharArray()) {
// put添加数据。如果字符c已经在map中,则将其计数加1;否则将其添加到map中并设置计数为1
mp.put(c, mp.getOrDefault(c, 0) + 1);
}
// 遍历map中的每个条目
Set<Character> keys = mp.keySet();
for(char key : keys)
{
int value = mp.get(key);
System.out.println(key + "(" + value + ")");
}
}
}