Map的总结

Map接口需要注意:
Map提供了一种映射关系,其中的元素是以键值对的形式存储的,能够实现根据key快速查找value;

键值是唯一的,值是可以重复,一个值可以和很多键形成对应关系,每个建最多只能映射到一个值。
(打个比方就比如身份证,身份证号是唯一的,但是身份证上面的名字却不是,我可以叫马克波罗,你也可以!)

Map集合的从数据结构是针对键有效,跟值无关。 Collection集合的数据结构是针对元素有效。

Map的功能:
添加功能:
V put(K key, V value):添加元素

删除功能:

  •  void clear():移除所有的键值对元素
    
  •   V	remove(Object key):根据键删除键值元素,并把值进行返回
    

判断功能:

  •  boolean containsKey(Object key):判断集合是否包含指定的键
    
  •  boolean containsValue(Object value):判断集合是否包含指定的值
    
  •  boolean isEmpty():判断集合是否为空
    
  • 获取功能:
  •  V get(Object key):根据键来获取值
    
  •  Set<K> keySet():获取集合中所有的键
    
  •  Collection<V> values():获取集合中所有值的集合
    
  •  Set<Map.Entry<K,V>> entrySet():返回的是键值对 对象 的集合
    
  • 长度功能:
  •  int size():返回集合中的键值对的对数
    

例子:
public static void main(String[] args) {

Map<String, String> map = new HashMap<>();

map.put("马可波罗", "小乔");
map.put("百里守约", "大乔");
map.put("狼狗", "明世隐");
System.out.println(map.put("公孙离", "貂蝉"));
System.out.println(map);
System.out.println(map.put("公孙离", "女娲")); //键是唯一的,所以此时键的值已经被替换,由"杨幂"变成了"王鸥";
System.out.println(map);

String remove = map.remove("狼狗");    //删除了"狼狗"键
System.out.println(remove);  //返回的是键所对应的值
//map.clear();  //这是一个清空集合的方法
System.out.println(map);

boolean containsKey = map.containsKey("马可波罗"); //判断集合中是否包含该键
System.out.println(containsKey);
boolean containsValue = map.containsValue("小娃娃");//判断集合中是否包含该值
System.out.println(containsValue);
//map.clear();

boolean empty = map.isEmpty(); //判断集合是否为空
System.out.println(empty);

System.out.println("----------------------");
String string = map.get("马可波罗");//通过键来获取值
System.out.println(string);

Set<String> keySet = map.keySet();//获取集合中所有的键,因为键是唯一的 所以用Set(唯一性)来接收
for (String string2 : keySet) { //遍历
	System.out.println(string2+"--------"+map.get(string2)); 
}
System.out.println(keySet);
Collection<String> values = map.values(); //获取所有的值
System.out.println(values);
System.out.println(map.size());//返回集合中的键值对的对数

//Set<Map.Entry<K,V>> entrySet():返回的是键值对 对象 的集合

Set<Map.Entry<String, String>> entrySet = map.entrySet();
for (Entry<String, String> entry : entrySet) {
	System.out.println(entry.getKey()+"-------"+entry.getValue());
}

}

HashMap类

HashMap是Map的一个重要实现类,也是最常用的,基于哈希表实现(保证唯一性)

练习·:要求如果两个对象的成员变量的值相同,则为同一个对象
假设我们定义一个工人类,想要比较成员变量是否相同或者集合是否存在这个对象
我们需要实现equlas方法的重写

例子:
package com.hwua.Map;

public class Worker {

private String name;
private int age;
public Worker() {
	super();
}
public Worker(String name, int age) {
	super();
	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
public String toString() {
	return "Worker [name=" + name + ", age=" + age + "]";
}
@Override
public int hashCode() {
	final int prime = 31;
	int result = 1;
	result = prime * result + age;
	result = prime * result + ((name == null) ? 0 : name.hashCode());
	return result;
}
@Override
public boolean equals(Object obj) {
	if (this == obj)
		return true;
	if (obj == null)
		return false;
	if (getClass() != obj.getClass())
		return false;
	Worker other = (Worker) obj;
	if (age != other.age)
		return false;
	if (name == null) {
		if (other.name != null)
			return false;
	} else if (!name.equals(other.name))
		return false;
	return true;
}

}

public static void main(String[] args) {
	
	HashMap<Worker, Integer> map = new HashMap<>();
	map.put(new Worker("张三", 16), 8800);
	map.put(new Worker("李四", 26), 1800);
	map.put(new Worker("王五", 36), 4800);
	map.put(new Worker("张三", 46), 2800);
	map.put(new Worker("张三", 16), 1800);
	
	System.out.println(map);
	
	Set<Worker> keySet = map.keySet();
	for (Worker worker : keySet) {
		System.out.println(worker+"--"+map.get(worker));
	
	}	
}

除了HashMap还有TreeMap
要使用TreeMap进行排序,就要实现接口,可以在实体类(上例的工人类)中实现comprable接口的方法
也可以使用匿名内部类去实现ComparaTo接口的方法

直接上例子:(上例工人类适用于此例子)
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeMap<Worker, Integer> map = new TreeMap<>(new Comparator() {

		@Override
		public int compare(Worker o1, Worker o2) {
			// TODO Auto-generated method stub
			int num = o1.getAge()-o2.getAge();
			int num2 = num==0?o1.getName().compareTo(o2.getName()):num;
			
			return num2;
		}
	});
	map.put(new Worker("张三", 16), 8800);
	map.put(new Worker("李四", 26), 1800);
	map.put(new Worker("王五", 36), 4800);
	map.put(new Worker("张三", 46), 2800);
	map.put(new Worker("张三", 16), 1800);
	
	System.out.println(map);
}

扩展:
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<HashMap<String, String>> arrayList = new ArrayList<>();
HashMap<String, String> sanguo = new HashMap<>();
sanguo.put(“周瑜”, “小乔”);
sanguo.put(“吕布”, “貂蝉”);
arrayList.add(sanguo);

	HashMap<String, String> xiyouji = new HashMap<>();
	xiyouji.put("牛魔王", "铁扇公主");
	xiyouji.put("至尊宝", "紫霞仙子");
	arrayList.add(xiyouji);
	
	HashMap<String, String> wuxia = new HashMap<>();
	wuxia.put("郭靖", "黄蓉");
	wuxia.put("杨过", "大雕");
	arrayList.add(wuxia);
	
	System.out.println(arrayList);
	for (HashMap<String, String> hashMap : arrayList) {
		Set<Entry<String, String>> entrySet = hashMap.entrySet();
		for (Entry<String, String> entry : entrySet) {
			System.out.println(entry.getKey()+"--"+entry.getValue());
		}
	}
	
}
集合里面可以有很多元素,一个键值对就是一个元素。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值