一、实验目的
(1)掌握List集合、Set集合以及Map集合的使用;
(2)熟悉泛型的使用;
(3)熟悉Collection和Arrays工具类的使用
二、预习与准备
(1)List接口、Set接口和Map接口的使用;
(2)泛型,预习通过泛型解决不同数据类型转换的问题;
(3)Collection工具集和Arrays工具集相关方法的使用。
三、实验内容
1、(list集合)输入工人信息:
(1)创建一个List,在List 中增加三个工人,基本信息如下:
姓名 | 年龄 | 工资 |
---|---|---|
zhang3 | 18 | 3000 |
li4 | 25 | 3500 |
wang5 | 22 | 3200 |
(2)在li4 之前插入一个工人,信息为:姓名:zhao6,年龄:24,工资3300 。
(3)删除wang5 的信息 。
(4)遍历,打印List 中所有工人的信息 。
参考代码:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
class Worker {
String name;
int age;
int salary;
public Worker() {
super();
}
public Worker(String name, int age, int salary) {
super();
this.name = name;
this.age = age;
this.salary = salary;
}
@Override
public String toString() {
return "Worker [name=" + name + ", age=" + age + ", salary=" + salary + "]";
}
}
public class Test1 {
public static void main(String[] args) {
// 1.创建一个List,在List 中增加三个工人
List<Worker> list = new ArrayList<Worker>();
list.add(new Worker("zhang3", 18, 3000));
list.add(new Worker("li4", 25, 3500));
list.add(new Worker("wang5", 22, 3200));
// 遍历输出
System.out.println("1.创建一个List,在List 中增加三个工人后的集合信息为:");
Iterator<Worker> iterator1 = list.iterator();
while (iterator1.hasNext()) {
Worker w = iterator1.next();
System.out.println(w.toString());
}
// 2.在li4 之前插入一个工人,信息为:姓名:zhao6,年龄:24,工资3300
list.add(1, new Worker("zhao6", 24, 3300));
// 遍历输出
System.out.println("2.在li4 之前插入一个工人,信息为:姓名:zhao6,年龄:24,工资3300后的集合为:");
Iterator<Worker> iterator2 = list.iterator();
while (iterator2.hasNext()) {
Worker w = iterator2.next();
System.out.println(w.toString());
}
// 3.删除wang5 的信息 。
list.remove(3);
// 遍历输出
System.out.println("3.删除wang5 的信息 后的集合为:");
Iterator<Worker> iterator3 = list.iterator();
while (iterator3.hasNext()) {
Worker w = iterator3.next();
System.out.println(w.toString());
}
}
}
运行结果:
2、现有若干图书信息(包含名称title、作者author、定价price)需要存储到set集合中,保证集合中无重复元素,并遍历查看。可以认为所有信息都相同的图书为重复数据。
参考代码:
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
class Book {
String title;
String author;
double price;
public Book() {
super();
}
public Book(String title, String author, double price) {
super();
this.title = title;
this.author = author;
this.price = price;
}
@Override
public String toString() {
return "Book [title=" + title + ", author=" + author + ", price=" + price + "]";
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
Book book = (Book) o;
return Double.compare(book.price, price) == 0 && Objects.equals(title, book.title)
&& Objects.equals(author, book.author);
}
@Override
public int hashCode() {
return Objects.hash(title, author, price);
}
}
public class Test2 {
public static void main(String[] args) {
Set<Book> set = new HashSet<Book>();
// 添加两个完全一样的
set.add(new Book("三国演义", "罗贯中", 100));
set.add(new Book("三国演义", "罗贯中", 100));
// 添加两个只有书名有区别的
set.add(new Book("红楼梦", "曹雪芹", 1000));
set.add(new Book("红楼梦1", "曹雪芹", 1000));
// 添加两个只有作者有区别的
set.add(new Book("西游记", "吴承恩", 1000));
set.add(new Book("西游记", "吴承恩1", 1000));
// 添加两个只有价格有区别的
set.add(new Book("水浒传", "施耐庵", 100));
set.add(new Book("水浒传", "施耐庵", 1000));
//遍历查看
System.out.println("遍历查看:");
for (Book book : set){
System.out.println(book);
}
}
}
运行结果:
3、已知字符串“adhflkalkfdhasdkhflsa”
(1)统计去掉重复后的字符
(2)统计每个字符出现的次数,使用map存储,字符为键,次数为值。
(3)遍历map,打印统计信息
参考代码:
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Test3 {
public static void main(String[] args) {
String str="adhflkalkfdhasdkhflsa";
System.out.println("字符串为:"+str);
Set<Character> set=new HashSet<Character>();
char[] ch=str.toCharArray();
for(Character c:ch) {
set.add(c);
}
Iterator<Character> li= set.iterator();
System.out.print("去掉重复后的字符:");
while(li.hasNext()){
Character character=li.next();
System.out.print(character+" ");
}
System.out.println("\n去掉重复后共有"+set.size()+"个字符。");
Map<Character,Integer> map=new HashMap<Character,Integer>();
for(Character c: ch) {
map.put(c, map.containsKey(c)?(map.get(c)+1):1);
}
//遍历map,打印统计信息
System.out.println("遍历map,打印统计信息:");
Set keyset=map.keySet();
Iterator iterator = keyset.iterator();
while(iterator.hasNext()){
Character key=(Character) iterator.next();
int count=map.get(key);
System.out.println(key+":"+count);
}
}
}
运行结果:
四、实验小结
通过本次实验更加熟悉了List集合、Set集合以及Map集合的使用,集合之间的关系更加明了,根据需要使用合适的集合,才能使逻辑更加简单,同时熟悉了泛型在集合中的使用,可以解决不同数据类型之间的转化。Arrays工具类可以使集合转化为数组,map集合是一个键值对,可根据键从集合中取出相应的值。在遍历输出中,在循环遍历中有for循环和foreach以及迭代器Iterator,在遍历集合时,根据不同场景选择不同的遍历方式,会更加方便。