java--集合-Map
【摘要】
java--集合-Map
一、什么是Map
映射关系,也有人称为字典,Map集合里存在两组值,一组是key,一组是value。Map里的key不允许重复。通过key总能找到唯一的value与之对应。
Map里的key集存储方式和对应的Set集合中的元素存储方式一致;学生都有一个学号,我们能点学...
java--集合-Map
一、什么是Map
- 映射关系,也有人称为字典,Map集合里存在两组值,一组是key,一组是value。Map里的key不允许重复。通过key总能找到唯一的value与之对应。
- Map里的key集存储方式和对应的Set集合中的元素存储方式一致;
- 学生都有一个学号,我们能点学号就能找到某个学生,好比这个学号就是key,学生就是value。
- Map.Entry是Map接口的内部接口,专门用来保存key-value内容:
二、Map常用方法
- void clear():删除该Map对象中所有的key-value对。也就是清理该集合;
- boolean containsKey(Object key):查询Map中是否包含指定的key;
- boolean containsValue(Object value):查询Map中是否包含至少一个value;
- Set entrySet():返回Map所包含的key-value对所组成的Set集合,每个集合元素都是Map.Entry对象(Entry是Map内部类);
- Object get(Object key):返回指定key所对应的value,若此Map中不包含该key,返回null;
- boolean isEmpty():判断Map集合是否为空;
- Set keySet():返回该Map中所有key所组成的Set集合;
- Object put(Object key,Object value):添加一个key-value对,若Map中已有与key相等的key-value对,则新的key-value对覆盖原来的key-value对;
- void putAll(Map m):将m中的key-value赋值到调用该方法的Map对象中;
- Object remove(Object key):删除指定key所对应的key-value对,返回本删除key所关联的value,若key不存在,返回null;
- int size():返回该Map里面key-value对的个数;
- Collection values():返回Map里所有value组成的Collection。
三、Map.Entry
- Entry是Map接口里面的一个内部接口.
- 该接口用于封装key- value,有3个方法:
- Object getKey();返回Entry里包含的key值
- Object getValue();返回Entry里包含的value值
- Object setValue(Object value):设置Entry里包含的value值,并返回新设置的value值;
四、Map集合的输出
- 按照最正统的做法,所有的Map集合的内容都要依靠Iterator输出,以上虽然是完成了输出,但是完成的不标准,Map集合本身并不能直接为Iterator实例化,如果此时非要使用Iterator输出Map集合中内容的话,则要采用如下的步骤:
方法一:
1.通过entrySet方法变成Set对象
2.调用Set的Iterator方法,此时每个Iterator对象是Map.Entry对象
3.对Map.Entry分离出 key - value
方法二:
1.通过keySet得到Map集合多有key的Set集合
2.调用Set的Iterator方法,此时每个Iterator对象是key值
3.通过Map的getValue(key)得到value值
五、Map集合常用类
- HashMap:线程不安全,速度快,允许存放null键,null值。类中的key都属于无序存放的
- 即使HashMap线程不安全,在多线程中也推荐使用
- Collections类: public static Map synchronizedMap(Map m)来返回线程同步的映射;
- HashMap里的key存储和保存HashSet里面的元素一致,若自定义类作为HashMap或Hashtable的key:当两个key对象的equals方法返回true时,两个key对象的hashCode值也应一样;
- TreeMap:对key进行排序,排序原理与TreeSet相同。
HashMap实例
-
import java.util.Collection;
-
import java.util.HashMap;
-
import java.util.Map;
-
import java.util.Set;
-
-
-
public class MapDemo {
-
public static void main(String[] args) {
-
-
Map map = new HashMap();
-
/**
-
* Map里的key必须唯一,不然后续的会覆盖前面的
-
*
-
* Entry是Map的内部接口: 表示一组映射关系
-
*
-
* Map里key不记录顺序, 和 Set一样;
-
*
-
*
-
*/
-
map.put("1", "A");
-
map.put("1", "C");
-
map.put("2", "B");
-
map.put("3", "C");
-
map.put(null, null);
-
-
System.out.println(map);
-
/**
-
* boolean containsKey(Object key) 如果此映射包含指定键的映射关系,则返回 true。
-
* boolean containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true。
-
*/
-
-
System.out.println(map.containsKey("3"));
-
System.out.println(map.containsKey("33"));
-
System.out.println(map.containsValue("E"));
-
System.out.println(map.containsValue("C"));
-
-
/*
-
* Object get(Object key) 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
-
* */
-
-
Object v = map.get("3");
-
System.out.println(v);
-
-
/*
-
* void putAll(Map m)
-
从指定映射中将所有映射关系复制到此映射中(可选操作)。
-
* */
-
-
Map map2 = new HashMap();
-
map2.put("A", "春哥");
-
map2.put("C", "著姐");
-
-
map.putAll(map2);
-
-
System.out.println(map);
-
-
/*
-
* Object remove(Object key) 如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
-
* */
-
-
v = map.remove("A");
-
System.out.println(v);
-
System.out.println(map);
-
/**
-
* int size() 多少组映射关系(Entry)
-
*/
-
System.out.println(map.size());
-
-
/*
-
* Set entrySet() 返回此映射中包含的映射关系的 Set 视图。
-
* */
-
-
Set entrys = map.entrySet();
-
-
for (Object o : entrys) {
-
-
if(o instanceof Map.Entry){
-
Map.Entry entry = ( Map.Entry) o;
-
-
/*
-
* Object getKey() 返回与此项对应的键。
-
Object getValue() 返回与此项对应的值。
-
Object setValue(V value) 用指定的值替换与此项对应的值(可选操作)。
-
-
* */
-
System.out.println("entry.key-->"+entry.getKey());
-
System.out.println("entry.value-->"+entry.getValue());
-
System.out.println("entry.setvalue-->"+entry.setValue("Will"));
-
System.out.println("entry.value-->"+entry.getValue());
-
}
-
}
-
System.out.println(map);
-
-
/*
-
* Set keySet() 返回此映射中包含的键的 Set 视图。
-
* */
-
-
Set keys = map.keySet();
-
for (Object key : keys) {
-
System.out.println("key-->" + key);
-
System.out.println("value-->" + map.get(key));
-
}
-
-
-
/*
-
* Collection<V> values() 返回此映射中包含的值的 Collection 视图。
-
* */
-
-
Collection vs = map.values();
-
for (Object val : vs) {
-
System.out.println("value=== " + val);
-
}
-
-
//==========================================
-
//Can only iterate over an array or an instance of java.lang.Iterable
-
/*for(Object obj : map){
-
-
}*/
-
}
-
}
六、TreeMap
- HashMap子类中的key都属于无序存放的,如果现在希望有序(按key排序)则可以使用TreeMap类完成,但是需要注意的是,由于此类需要按照key进行排序,而且key本身也是对象,那么对象所在的类就必须实现Comparable接口。
- 使用 HashMap的时候 key和 value都可以保存为 nulll;
- 当 使用 TreeMap 的时候 key不能为null,value可以是 null;
- TreeMap对key的排序方式:
- 自然排序;
- 定制排序;
- TreeMap判断两个key元素是否相等标准(和HashSet一样):
- compareTo方法或compare方法返回0;
TreeMap实例
-
import java.util.Comparator;
-
import java.util.HashMap;
-
import java.util.TreeMap;
-
-
class A implements Comparable{
-
-
public int compareTo(Object o) {
-
return 0;
-
}
-
-
}
-
public class TreeMapDemo {
-
public static void main(String[] args) {
-
-
TreeMap m = new TreeMap();
-
-
m.put("3", "3");
-
m.put("7", "7");
-
m.put("-9", "-9");
-
m.put("A", "A");
-
-
System.out.println(m);
-
/**
-
* Map.Entry ceilingEntry(K key)
-
返回一个键-值映射关系,它与大于等于给定键的最小键关联;如果不存在这样的键,则返回 null。
-
*/
-
-
System.out.println(m.ceilingEntry("4"));
-
-
/**
-
* Map.Entry firstEntry()
-
返回一个与此映射中的最小键关联的键-值映射关系;如果映射为空,则返回 null。
-
*/
-
-
System.out.println(m.firstEntry());
-
-
m = new TreeMap();
-
//m.put("A", new A());
-
//m.put("A", new A());
-
-
m.put(new A(), "A");
-
m.put(new A(), "A");
-
m.put(new A(), "A");
-
m.put(new A(), "A");
-
/*
-
* 使用 HashMap的时候 key和 value都可以保存为 nulll;
-
当 使用 TreeMap 的时候 key不能为null,value可以是 null;
-
对象要调用 compreTo方法比较,
-
* */
-
m.put(null,null);
-
System.out.println(m);
-
-
//Map里 key的定制排序
-
m = new TreeMap(new Comparator() {
-
public int compare(Object o1, Object o2) {
-
return 0;
-
}
-
});
-
-
/**
-
* HashSet HashMap
-
* TreeSet TreeMap
-
*
-
*
-
* 其实 Set和Map在底层有莫大的关系:
-
* 可以这样理解:
-
* HashMap里的key其实就是HashSet元素;
-
*
-
* public HashSet() {
-
map = new HashMap<>();
-
}
-
*/
-
}
-
}
文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。
原文链接:brucelong.blog.csdn.net/article/details/80016595
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)