JavaSE Map集合
-
-
map
中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。 -
collection
中的集合称为单列集合,map
中的集合称为双列集合。 -
需要注意的是,
map
中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
hashmap集合
linkedhashmap集合。
-
hashmap<k,v>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,因此需要重写键的hashcode()方法、equals()方法。
-
linkedhashmap<k,v>:存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashcode()方法、equals()方法。
-
public v put(k key, v value)
: 把指定的键与指定的值添加到map集合中。如果键值存在则覆盖。 -
public v remove(object key)
: 把指定的键和对应的值在集合中删除,返回被删除元素的值。 -
public v get(object key)
根据指定的键,在map集合中获取对应的值。
map接口的方法演示
1 public class mapdemo { 2 public static void main(string[] args) { 3 //创建 map对象 4 hashmap<string, string> map = new hashmap<string, string>(); 5 6 //添加元素到集合 7 map.put("黄晓明", "杨颖"); 8 map.put("文章", "马伊琍"); 9 map.put("邓超", "孙俪"); 10 system.out.println(map); 11 12 //string remove(string key) 13 system.out.println(map.remove("邓超")); 14 system.out.println(map); 15 16 // 想要查看 黄晓明的媳妇 是谁 17 system.out.println(map.get("黄晓明")); 18 system.out.println(map.get("邓超")); 19 } 20 }
1 public class mapdemo01 { 2 public static void main(string[] args) { 3 //创建map集合对象 4 hashmap<string, string> map = new hashmap<string,string>(); 5 //添加元素到集合 6 map.put("胡歌", "霍建华"); 7 map.put("郭德纲", "于谦"); 8 map.put("薛之谦", "大张伟"); 9 10 //获取所有的键 获取键集 11 set<string> keys = map.keyset(); 12 // 遍历键集 得到 每一个键 13 for (string key : keys) { 14 //key 就是键 15 //获取对应值 16 string value = map.get(key); 17 system.out.println(key+"的cp是:"+value); 18 } 19 } 20 }
public set<map.entry<k,v>> entryset()
: 获取集合中所有的键值对
对象,保存到set集合中。
我们已经知道,map
中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在map
中是一一对应关系,这一对对象又称做map
中的一个entry(项)
。entry
将键值对的对应关系封装成了对象。即键值对
对象,这样我们在遍历map
集合时,就可以从每一个键值对(entry
)对象中获取对应的键与对应的值。
既然entry表示了一对键和值,那么也同样提供了获取对应键和对应值得方法:
-
public k getkey()
:获取entry对象中的键。 -
public v getvalue()
:获取entry对象中的值。
1 public class mapdemo02 { 2 public static void main(string[] args) { 3 // 创建map集合对象 4 hashmap<string, string> map = new hashmap<string,string>(); 5 // 添加元素到集合 6 map.put("胡歌", "霍建华"); 7 map.put("郭德纲", "于谦"); 8 map.put("薛之谦", "大张伟"); 9 10 // 获取 所有的 entry对象 entryset 11 set<entry<string,string>> entryset = map.entryset(); 12 13 // 遍历得到每一个entry对象 14 for ( entry<string, string> entry : entryset) { 15 // 解析 16 string key = entry.getkey(); 17 string value = entry.getvalue(); 18 system.out.println(key+"的cp是:"+value); 19 } 20 } 21 }
在hashmap下面有一个子类linkedhashmap,它是链表和哈希表组合的一个数据存储结构。在保证key值对象唯一的前提下,还能保证元素的存取顺序。
1 public class linkedhashmapdemo { 2 public static void main(string[] args) { 3 linkedhashmap<string, string> map = new linkedhashmap<string, string>(); 4 map.put("邓超", "孙俪"); 5 map.put("李晨", "范冰冰"); 6 map.put("刘德华", "朱丽倩"); 7 set<entry<string, string>> entryset = map.entryset(); 8 for (entry<string, string> entry : entryset) { 9 system.out.println(entry.getkey() + " " + entry.getvalue()); 10 } 11 } 12 }
需求:
计算一个字符串中每个字符出现次数。
分析:
-
获取一个字符串对象
-
创建一个map集合,键代表字符,值代表次数。
-
遍历字符串得到每个字符。
-
判断map中是否有该键。
-
如果没有,第一次出现,存储次数为1;如果有,则说明已经出现过,获取到对应的值进行++,再次存储。
-
1 public class maptest { 2 public static void main(string[] args) { 3 //友情提示 4 system.out.println("请录入一个字符串:"); 5 string line = new scanner(system.in).nextline(); 6 // 定义 每个字符出现次数的方法 7 findchar(line); 8 } 9 public static void findchar(string line) { 10 //1:创建一个集合 存储 字符 以及其出现的次数 11 hashmap<character, integer> map = new hashmap<character, integer>(); 12 //2:遍历字符串 13 for (int i = 0; i < line.length(); i++) { 14 char c = line.charat(i); 15 //判断 该字符 是否在键集中 16 if (!map.containskey(c)) {//说明这个字符没有出现过 17 //那就是第一次 18 map.put(c, 1); 19 } else { 20 //先获取之前的次数 21 integer count = map.get(c); 22 //count++; 23 //再次存入 更新 24 map.put(c, ++count); 25 } 26 } 27 system.out.println(map); 28 } 29 }
treemap()
:使用自然顺序对key值进行排序。
treemap(comparator comparator)
:创建对象时,传递比较器对象。按比较器的比较方式排序。
1 public class demo { 2 public static void main(string[] args) { 3 // 创建集合对象,key值按照自然顺序排序 4 treemap<string, string> map1 = new treemap<>(); 5 // 给集合中保存元素 6 map1.put( "affd", "123" ); 7 map1.put( "fff", "456" ); 8 map1.put( "abc", "789" ); 9 system.out.println( "map1 = " + map1); 10 11 // 创建集合对象,并传递比较器,按照指定的方式比较 12 treemap<string, string> map2 = new treemap<>(new comparator<string>() { 13 public int compare(string o1, string o2) { 14 // 按照长度比较 , 相同长度不保存 15 return o1.length() - o2.length(); 16 } 17 }); 18 // 给集合中保存元素 19 map2.put( "affd", "123" ); 20 map2.put( "fff", "456" ); 21 map2.put( "abc", "789" ); 22 system.out.println( "map2 = " + map2 ); 23 } 24 }
上一篇: C++ 函数的二义性
下一篇: 互联网人的中年危机:没有资格996