Map存储对象

Map存储对象

对象类的代码(已经重写equals方法和tostring方法,hashcode方法!):

public class Person {
private String name;
private int age;

public Person() {
}

public Person(String name, int age) {
    this.name = name;
    this.age = age;
}

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;
}

@Override//继承自object类,覆盖重写此方法。
public String toString() {
    return "我叫:"+name+",年龄为:"+age;
}
//equals比较两个地址值没有意义,所以覆盖重写一下。

  /*  @Override
public boolean equals(Object obj) {
    //为了提高效率
    *//*1.传递的参数是自己*//*
    if (obj==this)
        return true;
    //2.传递的参数是空
    if (obj==null)
        return  false;
    //if语句防止类型转换错误。
    if (obj instanceof Person)
    {
        Person p=(Person)obj;
        boolean b=this.name.equals(p.name)&&this.age==p.age;
        return b;
    }
    //向下转型可以调用到子方法。
   return false;
}*/
//等效于上面的自定义的equals重写。
@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;//使用反射技术,判断o是否是person类 等效于obj instanceof person。getclass()相当于获取类名称,如Getclass()获取当前类的名称。
    Person person = (Person) o;
    return age == person.age &&
            Objects.equals(name, person.name);
}

@Override
public int hashCode() {
    return Objects.hash(name, age);
}
}

对象作为key值传入

注意点:
key值唯一(为了保证key唯一,必须重写hashcode方法和equals方法),value值不固定

private static void demo02() {
    HashMap<Person,String> map=new HashMap<>();
    map.put(new Person("迪丽热巴1",18),"上海");
    map.put(new Person("迪丽热巴2",19),"北京");
    map.put(new Person("迪丽热巴3",20),"广州");
    map.put(new Person("迪丽热巴1",18),"北京");
    Set<Map.Entry<Person, String>> entries = map.entrySet();
    for (Map.Entry<Person, String> entry:entries
         ) {
        Person person = entry.getKey();
        String value = entry.getValue();
        System.out.println(value+"------>"+person);

    }
}

显示效果
北京------>我叫:迪丽热巴1,年龄为:18
北京------>我叫:迪丽热巴2,年龄为:19
广州------>我叫:迪丽热巴3,年龄为:20

对象作为value传入

private static void demo01() {
    HashMap<String,Person> map=new HashMap<>();
    map.put("上海",new Person("迪丽热巴1",18));
    map.put("北京",new Person("迪丽热巴2",19));
    map.put("广州",new Person("迪丽热巴3",20));
    map.put("北京",new Person("迪丽热巴4",21));
    for (String str:map.keySet()
    ) {
        Person p = map.get(str);
        System.out.println(str+"------>"+p);

    }
}

显示效果
上海------>我叫:迪丽热巴1,年龄为:18
广州------>我叫:迪丽热巴3,年龄为:20
北京------>我叫:迪丽热巴4,年龄为:21

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在处理JSON对象时,我们经常需要将其内容遍历并存储Map中,Map是一种存储键值对的数据结构,能够快速检索数据。 在编程语言中,比如Java,遍历一个JSON对象并将数据存储Map中通常需要以下步骤: 1. 解析JSON对象:使用JSON解析库(如Jackson或Gson)将JSON字符串解析为一个可操作的对象,例如在Java中可以将JSON字符串解析为一个`JsonObject`。 2. 遍历JSON对象:遍历解析后的JSON对象,获取每个键值对。 3. 存储Map中:将遍历得到的键值对存储Map中,键为JSON对象的属性名,值为对应的属性值。 以下是一个简单的例子,假设我们使用Java语言和Gson库来完成这个任务: ```java import com.google.gson.JsonObject; import com.google.gson.JsonParser; import java.util.HashMap; import java.util.Map; public class JsonToMap { public static void main(String[] args) { String jsonString = "{\"name\":\"张三\",\"age\":30,\"city\":\"北京\"}"; JsonObject jsonObject = JsonParser.parseString(jsonString).getAsJsonObject(); Map<String, Object> map = new HashMap<>(); for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) { map.put(entry.getKey(), entry.getValue().getAsString()); // 假设所有值都是字符串型 } // 输出map内容 System.out.println(map); } } ``` 在这个例子中,我们首先定义了一个JSON格式的字符串`jsonString`,然后使用`JsonParser`解析这个字符串为`JsonObject`。接着,我们创建了一个`HashMap`,遍历`JsonObject`的每个键值对,并将它们存储到`Map`中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值