java 用List存储对象操作(实例讲解)

mac2024-10-20  12

一.List包的引入

import java.util.List;

import java.util.ArrayList;

注:如果用提示(灯泡)引入的包,一定要注意是util中的,有可能错误的自动引入了java.awt.List,那么在初始化的时候会显示错误。如:List Books=new ArrayList(); 会提示你 “类型List不带有参数”,一定要注意这个小细节。

二.图书馆实例:

创建一个图书馆类,实现显示所有图书,添加图书和查找图书,并且可以由读者借书,使其改变图书的借还状态。

1.创建Book类

public class Book { private String Author;//作者 public Boolean IsBorrowed;//借还状态 private String Name;//书名 private Double Price;//价格 Book(){}//无参构造函数 public Book(String name,String author,double price) { Name=name; Author=author; Price=price; IsBorrowed=false; } public String getNmae() { return Name; } public String getAuthor() { return Author; } public Boolean getIsBorrowed() { return IsBorrowed; } public String getName() { return Name; } public Double getPrice() { return Price; } public void setAuthor(String Author) { this.Author = Author; } public void setIsBorrowed(Boolean IsBorrowed) { this.IsBorrowed = IsBorrowed; } public void setName(String Name) { this.Name = Name; } public void setPrice(Double Price) { this.Price = Price; } public String toString(){ return Name+","+Author+","+Price+"元"+(IsBorrowed?"未还":"可借"); } }

2.创建图书馆类

import java.util.List; import java.util.ArrayList; public class Library { List<Book> Books; public Library(){ Books=new ArrayList<Book>(); } public void insertBook(Book book)//插入图书的方法 { Books.add(book); } public Book[] findBook(String BookName){//查找图书的方法 ArrayList<Book> rtn=new ArrayList<Book>(); for(Book book:Books){ if(book.getNmae().compareTo(BookName)==0) { rtn.add(book); } } Book[] rtnBook=new Book[rtn.size()]; rtn.toArray(rtnBook); return rtnBook;//返回的是一个数组 } public Book[] GetAllBooks(){//获取所有的图书信息 Book[] rtnBook=new Book[Books.size()]; Books.toArray(rtnBook);//这里使用数组储存相关图书信息 return rtnBook; } }

3.创建读者类

public class Reader { private String Name; public Reader(String name) { Name=name; } public void BorrowBook(Book book) { book.IsBorrowed=true;//修改图书的借还状态 } public void ReturnBook(Book book) { book.IsBorrowed=false; } }

4.主函数

import java.util.Iterator;//引入迭代器的包 public class Main { public static void main(String[] s) { Book a=new Book("格林童话","王五",16.0); Book b=new Book("吸血鬼日记","张三",28.6); Book c=new Book("三体","李四",39.8); Book d=new Book("格林童话","小六",42.5);//在这里创建了四本图书 Library libraray=new Library();//初始化一个图书馆 libraray.insertBook(a); libraray.insertBook(b);//这里可以用自己写的方法添加图书 libraray.Books.add(c); libraray.Books.add(d);//也可以调用add()的方法添加函数 System.out.println("获取所有图书:"); Book[] result1=libraray.GetAllBooks(); for(Book res:result1)//这里使用了for each语句遍历图书 System.out.println(res); System.out.println(); System.out.println("查找指定图书:"); Book[] result2=libraray.findBook("格林童话");//创建一个数组获取返回的数组 for(Book res:result2) System.out.println(res); System.out.println(); Reader xxx=new Reader("小明");//创建一个读者"小明"。 xxx.BorrowBook(a);//借"格林童话"图书 System.out.println("小明借书完成后,获取所有图书:"); Book[] result3=libraray.GetAllBooks(); for(Book res:result3) System.out.println(res); System.out.println(); for(Book res:libraray.Books)//修改三体图书的属性 if(res.getName().compareTo("三体")==0)//使用了compareTo()方法进行比较. res.setName("三体(第二版)"); System.out.println("修改三体图书的属性,显示修改后的数据:"); Iterator iter= libraray.Books.iterator();//这里使用了迭代器进行遍历 while(iter.hasNext())//用hasNext()函数判空 System.out.println(iter.next()); }}

注:对于Iterator迭代器,迭代器创建后,如果修改了list,那么需要重新创建一个新的迭代器,否则会抛出java.util.ConcurrentModificationException异常。相关详细知识请传送:点我传送!

5.运行结果

run: 获取所有图书: 格林童话,王五,16.0元可借 吸血鬼日记,张三,28.6元可借 三体,李四,39.8元可借 格林童话,小六,42.5元可借

查找指定图书: 格林童话,王五,16.0元可借 格林童话,小六,42.5元可借

小明借书完成后,获取所有图书: 格林童话,王五,16.0元未还 吸血鬼日记,张三,28.6元可借 三体,李四,39.8元可借 格林童话,小六,42.5元可借

修改三体图书的属性,显示修改后的数据: 格林童话,王五,16.0元未还 吸血鬼日记,张三,28.6元可借 三体(第二版),李四,39.8元可借 格林童话,小六,42.5元可借

最新回复(0)