前言
上一篇做了Worker员工案例,本篇是实验剩下的自主设计题目,一共4个独立小案例:User用户类、Product商品类、整数集合、字符集合。覆盖集合去重、遍历、筛选、倒序输出,适合课程作业直接参考。
案例1:User用户类
需求:属性姓名、年龄、性别;封装,无参有参构造;存入List;打印所有女用户;遍历筛选姓名长度大于2的用户
import java.util.ArrayList;
import java.util.List;
class User{
private String name;
private int age;
private String gender;
public User(){}
public User(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
//get set
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getGender() { return gender; }
public void setGender(String gender) { this.gender = gender; }
@Override
public String toString() {
return "User{name='" + name + "', age=" + age + ", gender='" + gender + "'}";
}
}
public class UserTest {
public static void main(String\[\] args) {
List userList = new ArrayList<>();
userList.add(new User("李明",20,"男"));
userList.add(new User("小红",19,"女"));
userList.add(new User("阿雅",21,"女"));
System.out.println("===所有女用户===");
for(User u : userList){
if("女".equals(u.getGender())){
System.out.println(u);
}
}
System.out.println("\n===姓名长度大于2的用户===");
for(User u : userList){
if(u.getName().length()>2){
System.out.println(u);
}
}
}
}
案例2:Product商品类
需求:商品名、单价、数量、产地;集合不能同名商品;筛选价格>1000、售空商品、产地北京;按商品名查询、价格区间查询
核心:添加商品前判断,商品名相同就不添加,实现简单去重
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class Product{
private String pname;
private double price;
private int count;
private String address;
public Product(){}
public Product(String pname, double price, int count, String address) {
this.pname = pname;
this.price = price;
this.count = count;
this.address = address;
}
//get set
public String getPname() { return pname; }
public void setPname(String pname) { this.pname = pname; }
public double getPrice() { return price; }
public void setPrice(double price) { this.price = price; }
public int getCount() { return count; }
public void setCount(int count) { this.count = count; }
public String getAddress() { return address; }
public void setAddress(String address) { this.address = address; }
@Override
public String toString() {
return "Product{" +"商品名='" + pname + ''' +", 价格=" + price +", 库存=" + count +", 产地='" + address + ''' + '}';
}
}
public class ProductTest {
public static void main(String\[\] args) {
List productList = new ArrayList<>();
addProduct(productList,new Product("手机",2999,10,"北京"));
addProduct(productList,new Product("平板",1200,0,"上海"));
addProduct(productList,new Product("耳机",199,50,"北京"));
addProduct(productList,new Product("手机",2999,20,"深圳"));//同名,不会加入集合
System.out.println("====价格大于1000商品====");
for(Product p : productList){
if(p.getPrice()>1000) System.out.println(p);
}
System.out.println("\n====售空商品====");
for(Product p : productList){
if(p.getCount() ==0) System.out.println(p);
}
System.out.println("\n====产地北京====");
for(Product p : productList){
if("北京".equals(p.getAddress())) System.out.println(p);
}
Scanner sc = new Scanner(System.in);
System.out.print("\n输入商品名查询:");
String name = sc.next();
boolean find = false;
for(Product p : productList){
if(p.getPname().equals(name)){
System.out.println(p);
find=true;break;
}
}
if(!find) System.out.println("商场无此商品!!!");
System.out.print("输入最低价格:");
double min = sc.nextDouble();
System.out.print("输入最高价格:");
double max = sc.nextDouble();
System.out.println("价格区间内商品:");
for(Product p : productList){
if(p.getPrice()>=min && p.getPrice()<=max) System.out.println(p);
}
sc.close();
}
//添加商品方法:判断同名不添加
public static void addProduct(List<Product> list,Product p){
for(Product item : list){
if(item.getPname().equals(p.getPname())){
System.out.println("商品已存在,不重复添加");
return;
}
}
list.add(p);
}
}
案例3:List存储整数
需求:打印集合、筛选三位数、求平均值、最大值、倒序输出
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class NumberTest {
public static void main(String\[\] args) {
List numList = new ArrayList<>();
numList.add(19);
numList.add(45);
numList.add(309);
numList.add(21);
numList.add(189);
System.out.println("全部数据:"+numList);
System.out.print("三位数:");
for(Integer n : numList){
if(n>=100 && n<=999) System.out.print(n+" ");
}
//平均值
double sum=0;
for(Integer n : numList) sum+=n;
System.out.println("\n平均值:"+sum/numList.size());
//最大值
int max = Collections.max(numList);
System.out.println("最大值:"+max);
//倒序
Collections.reverse(numList);
System.out.println("倒序输出:"+numList);
}
}
案例4:List存储字符
需求:字符拼接输出、提取大写字母、统计非字母个数
import java.util.ArrayList;
import java.util.List;
public class CharTest {
public static void main(String\[\] args) {
List charList = new ArrayList<>();
charList.add('A');
charList.add('a');
charList.add('s');
charList.add('p');
charList.add('+');
charList.add('X');
charList.add('-');
//字符拼接
StringBuilder sb = new StringBuilder();
for(Character c : charList) sb.append(c);
System.out.println("拼接结果:"+sb);
System.out.print("大写字母:");
int countNoLetter =0;
for(Character c : charList){
if(Character.isUpperCase(c)){
System.out.print(c+" ");
}
if(!Character.isLetter(c)){
countNoLetter++;
}
}
System.out.println("\n非字母的个数:"+countNoLetter);
}
}
知识点总结
-
ArrayList存储引用类型,自定义对象存入集合,遍历是最基础操作
-
简单去重:新增对象前循环判断同名,存在就不add
-
Collections工具类:max、reverse实现最大值、集合反转
-
Character工具类:isUpperCase、isLetter 判断字符类型
-
StringBuilder 适合字符串拼接,性能优于直接+拼接
结尾
这4个小案例覆盖了List集合大部分课程基础考点,适合写实验报告,也可以自己扩展更多条件筛选功能。