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

一.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
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Redis 中,hash 和 list 分别用于不同的数据存储需求。如果要将对象 list 存储在 hash 中,可以使用 Redis 的序列化功能将对象 list 转换为字符串后再存储在 hash 中。 在 Java 中,可以使用 RedisTemplate 的 HashOperations 接口进行 hash 操作,使用 Gson 序列化工具将对象 list 转换为字符串。以下是将对象 list 存储在 hash 中的示例代码: ```java // 准备要存储对象 list List<MyObject> objList = Arrays.asList( new MyObject("obj1", 1), new MyObject("obj2", 2), new MyObject("obj3", 3) ); // 将对象 list 转换为字符串 String objListStr = new Gson().toJson(objList); // 获取 HashOperations 对象 HashOperations<String, String, String> hashOps = redisTemplate.opsForHash(); // 存储对象 list 字符串到 hash 中 hashOps.put("hashKey", "objListField", objListStr); ``` 以上代码将对象 list 转换为字符串后,通过 hash 的 put 方法存储在 "hashKey" 这个 hash 中的 "objListField" 字段中。如果需要获取这个对象 list,可以通过以下代码进行反序列化: ```java // 获取 hash 中存储对象 list 字符串 String objListStr = hashOps.get("hashKey", "objListField"); // 将对象 list 字符串反序列化为 List<MyObject> List<MyObject> objList = new Gson().fromJson(objListStr, new TypeToken<List<MyObject>>(){}.getType()); ``` 以上代码通过 hash 的 get 方法获取到存储在 "hashKey" 这个 hash 中的 "objListField" 字段的值,然后通过 Gson 序列化工具将其反序列化为 List<MyObject> 对象。需要注意的是,MyObject 类需要实现序列化接口(Serializable 或 Parcelable)才能进行序列化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值