Java学习笔记32(集合框架六:Map接口)
2018-06-18 03:51:59来源:未知 阅读 ()
Map接口与Collection不同:
Collection中的集合元素是孤立的,可理解为单身,是一个一个存进去的,称为单列集合
Map中的集合元素是成对存在的,可理解为夫妻,是一对一对存进去的,称为双列集合
Map中存入的是:键值对,键不可以重复,值可以重复
Map接口中的常用集合:
1.HashMap:哈希表的存储结构,但是无法保证存取顺序
2.LinkedHashMap:存储数据采用的是哈希表和链表,可以有顺序
Map接口的常用方法:
示例:
package demo; import java.util.HashMap; import java.util.Map; public class MapDemo { public static void main(String[] args) { function1(); function2(); function3(); } public static void function1() { // 将键值对存储到集合中 Map<String, Integer> map = new HashMap<String, Integer>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); map.put("c", 4); System.out.println(map); // {b=2, c=4, a=1} // =连接键值对,存入重复键,则会覆盖 } public static void function2() { //通过键获取值 Map<Integer, String> map = new HashMap<Integer, String>(); map.put(1, "a"); map.put(2, "b"); map.put(3, "c"); String value = map.get(1); System.out.println(value);//a //有则返回值,不存在返回null } public static void function3(){ //移除集合中的键值对 Map<Integer, String> map = new HashMap<Integer, String>(); map.put(1, "a"); map.put(2, "b"); map.put(3, "c"); map.remove(3); System.out.println(map); //{1=a, 2=b} } }
Map接口的遍历:
第一种方式:
package demo; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class MapDemo { public static void main(String[] args) { function1(); function2(); } public static void function1() { Map<String, Integer> map = new HashMap<String, Integer>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); map.put("d", 4); Set<String> set = map.keySet(); Iterator<String> it = set.iterator(); while (it.hasNext()) { String key = it.next(); Integer value = map.get(key); System.out.println(key + "<==>" + value); } } public static void function2() { Map<String, Integer> map = new HashMap<String, Integer>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); map.put("d", 4); for (String key : map.keySet()) { Integer value = map.get(key); System.out.println(key + "<==>" + value); } } } // 遍历输出的无序
第二种方式(根据映射关系):
package demo; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class MapDemo { public static void main(String[] args) { Map<Integer, String> map = new HashMap<Integer, String>(); map.put(1, "a"); map.put(2, "b"); map.put(3, "c"); Set<Entry<Integer, String>> set = map.entrySet(); Iterator<Entry<Integer, String>> it = set.iterator(); while (it.hasNext()) { Entry<Integer, String> entry = it.next(); Integer key = entry.getKey(); String value = entry.getValue(); System.out.println(key + "<==>" + value); } } }
存储自定义对象:
package demo; public class Person { private String name; private int 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; } public Person(String name, int age) { super(); this.name = name; this.age = age; } public Person() { super(); // TODO Auto-generated constructor stub } @Override public String toString() { return "Person [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; Person other = (Person) 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; } }
package demo; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; //存储自定义类型 public class HashMapDemo { public static void main(String[] args) { function1(); function2(); } public static void function1() { // 自定义类型作为值出现 HashMap<String, Person> map = new HashMap<String, Person>(); map.put("a", new Person("1", 20)); map.put("b", new Person("2", 20)); map.put("c", new Person("3", 20)); // 利用两种遍历 for (String key : map.keySet()) { Person value = map.get(key); System.out.println(key + "<==>" + value); } for (Entry<String, Person> entry : map.entrySet()) { String key = entry.getKey(); Person value = entry.getValue(); System.out.println(key + "<==>" + value); } } public static void function2() { // 自定义类型作为键出现 // 保证键的唯一性,需要重写hashcode和equals方法 HashMap<Person, String> map = new HashMap<Person, String>(); map.put(new Person("a", 20), "a"); map.put(new Person("b", 20), "a"); map.put(new Person("c", 20), "a"); map.put(new Person("c", 20), "a"); // 两种遍历 for (Person key : map.keySet()) { String value = map.get(key); System.out.println(key + "<==>" + value); } for (Entry<Person, String> entry : map.entrySet()) { System.out.println(entry.getKey() + "<==>" + entry.getValue()); } } }
LinkedHashMap集合:
package demo; import java.util.LinkedHashMap; public class LinkedHashMapDemo { public static void main(String[] args) { LinkedHashMap<String, String> link = new LinkedHashMap<String, String>(); link.put("1", "a"); link.put("2", "a"); link.put("3", "a"); link.put("4", "a"); System.out.println(link); //{1=a, 2=a, 3=a, 4=a} //存取顺序一致 } }
set接口下还有一个hashtable集合,但是过时了,现在由hashmap取代
不过,要注意一个问题:
HashMap允许存储null值,HashTable不允许存储null值,两种都不允许存储null键
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:第一章--环境搭建
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash