原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/Android/2019/0826/617.html
--Map接口简介
本日常州游戏开发培训来看一看map鸠合,map映射接口,用于存放键值对,<key,value>,通过key来查找value,望文生义key不行为空,唯独且不重复,否则底层怎么查呢!
可以从图中看出Map为独自的接口,他和Collection有甚么差别呢?
Map和Collection在鸠合中并列存在。
Map鸠合是双列的,键值对,而Collection是单列鸠合
Map存储元素运用put方式,Collection运用Put方式。
Map遍历没有干脆取出元素的方式,而是先转成Set鸠合,再通过迭代获取元素。
--Map常用方式
--Map运用
增加:运用HashMap。立了手机App外包学生姓名和年纪之间的映射关系。并试图增加重复的键
复制代码
public static void main(String[] args) { // 定义一个Map的容器工具
Map<String, Integer > map1 = new HashMap<String, Integer >();
map1.put("jack", 20);
map1.put("rose", 18);
map1.put("lucy", 17);
map1.put("java", 25); // map1.put("jack", 30); 在没有hashCode和equals方式 增加重复的键值(值差别),会笼盖掉前方key值相像的值 System.out.println(map1);
Map<String, Integer> map2 = new HashMap<String, Integer>();
map2.put("张三丰", 100);
map2.put("虚竹", 20);
System.out.println("map2:" + map2);
// 从指定映射中将全部映射关系复制到此映射中。 map1.putAll(map2);
System.out.println("map1:" + map1);
}
复制代码
删除:
复制代码
public static void main(String[] args) {
// 删除:
// remove() 删除相关工具,指定key工具
// clear() 清空鸠合工具
Map<String, Integer> map1 = new HashMap<String, Integer>();
map1.put("jack", 20);
map1.put("rose", 18);
map1.put("lucy", 17);
map1.put("java", 25);
System.out.println(map1);
// 指定key,回笼删除的键值对映射的值。
map1.remove("java");
System.out.println(map1);
map1.clear();
System.out.println("map1:" + map1);
}
复制代码
获取:
复制代码
public static void main(String[] args) { // 获取:
// V get(Object key) 通过指定的key工具获取value工具
// int size() 获取容器的大小
Map<String, Integer> map1 = new HashMap<String, Integer>();
map1.put("jack", 20);
map1.put("rose", 18);
map1.put("lucy", 17);
map1.put("java", 25);
System.out.println(map1);
// V get(Object key) 通过指定的key工具获取value工具
System.out.println("value:" + map1.get("jack"));
// int size() 获取容器的大小
System.out.println("map.size:" + map1.size());
}
复制代码
App开发培训校验:
复制代码
public static void main(String[] args) { // 校验:
// boolean isEmpty() 校验鸠合是否为空 长度为0回笼true否则false
// boolean containsKey(Object key) 校验鸠合中是否包括指定的key
// boolean containsValue(Object value)
Map<String, Integer> map1 = new HashMap<String, Integer>();
map1.put("jack", 20);
map1.put("rose", 18);
map1.put("lucy", 17);
map1.put("java", 25);
System.out.println(map1);
System.out.println("isEmpty:" + map1.isEmpty());
System.out.println("containskey:" + map1.containsKey("jack"));
System.out.println("containsvalues:" + map1.containsValue(100));
}
复制代码
遍历Map的4中方式:
第一种:
复制代码
public static void main(String[] args) { //遍历Map 第一种方式
Map<String, Integer> map1 = new HashMap<String, Integer>();
map1.put("jack", 20);
map1.put("rose", 18);
map1.put("lucy", 17);
map1.put("java", 25);
//通过 map1.keySet() 获取key 通过key 找到value
for (String key : map1.keySet()) {
Integer value = map1.get(key);
System.out.println("key : "+key+" value : "+value);
}
}
复制代码
第二种:
复制代码
public static void main(String[] args) { //遍历Map 第二种方式
Map<String, Integer> map1 = new HashMap<String, Integer>();
map1.put("jack", 20);
map1.put("rose", 18);
map1.put("lucy", 17);
map1.put("java", 25);
//通过Map.Entry(String,Integer) 获取,而后运用entry.getKey()获取到键,通过entry.getValue()获取到值
for(Map.Entry<String, Integer> entry : map1.entrySet()){
System.out.println("键 key :"+entry.getKey()+" 值value :"+entry.getValue());
}
}
复制代码
常州网站开发培训第三种:
复制代码
//遍历Map 第三种方式
Map<String, Integer> map1 = new HashMap<String, Integer>();
map1.put("jack", 20);
map1.put("rose", 18);
map1.put("lucy", 17);
map1.put("java", 25);
//第三种只遍历键大概值,通过增强for轮回
for(String s1:map1.keySet()){//遍历map的键
System.out.println("键key :"+s1);
} for(Integer s2:map1.values()){//遍历map的值
System.out.println("值value :"+s2);
}
System.out.println("====================================");
}
复制代码
第四种:
复制代码
public static void main(String[] args) { //遍历Map 第一种方式
Map<String, Integer> map1 = new HashMap<String, Integer>();
map1.put("jack", 20);
map1.put("rose", 18);
map1.put("lucy", 17);
map1.put("java", 25);
//第四种Iterator遍历获取,而后获取到Map.Entry<String, String>,再得到getKey()和getValue()
Iterator<Map.Entry<String, Integer>> it=map1.entrySet().iterator(); while(it.hasNext()){
Map.Entry<String, Integer> entry=it.next();
System.out.println("键key :"+entry.getKey()+" value :"+entry.getValue());
}
}
复制代码
HashMap
底层是哈希表数据布局,线程是差别步的,可以存入null键,null值。要包管键的唯独性,必要笼盖hashCode方式,和equals方式。
案例:自定义工具作为Map的键。
复制代码
public class 企业培训Demo3 {
public static void main(String[] args) {
HashMap<Person, String> hm = new HashMap<Person, String>();
hm.put(new Person("jack", 20), "1001");
hm.put(new Person("rose", 18), "1002");
hm.put(new Person("lucy", 19), "1003");
hm.put(new Person("h毫米", 17), "1004");
hm.put(new Person("ll", 25), "1005");
System.out.println(hm);
System.out.println(hm.put(new Person("rose", 18), "1006")); //重写hashCode和equalse后key相像不会笼盖
Set<Entry<Person, String>> entrySet = hm.entrySet();
Iterator<Entry<Person, String>> it = entrySet.iterator();
while (it.hasNext()) {
Entry<Person, String> next = it.next();
Person key = next.getKey();
String value = next.getValue();
System.out.println(key + " = " + value);
}
}
}
class Person {
private String name;
private int age;
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
public int hashCode() {
return this.name.hashCode() + age * 37;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Person) {
Person p = (Person) obj;
return this.name.equals(p.name) && this.age == p.age;
} else {
return false;
}
}
@Override
public String toString() {
return "Person@name:" + this.name + " age:" + this.age;
}
}
}
复制代码
TreeMap
TreeMap的排序,TreeMap可以对鸠合中的键举行排序。若何实现键的排序?
方式一:元素本身具备对照性
和TreeSet同样道理,必要让存储在键地位的工具实现Comparable接口,重写compareTo方式,也即是让元素本身具备对照性,这种方式叫做 元素的天然排序也叫做默认排序。
方式二:容用具备对照性
当元素本身不具备对照性,大概本身具备的对照性不是所必要的。辣么此时可以让容器本身具备。必要定义一个类实现接口Comparator,重 写compare方式,并将该接口的子类实例工具作为参数传递给TreeMap鸠合的组织方式。
留意:当Comparable对照方式和Comparator对照方式同时存在时,以Comparator的对照方式为主;
留意:在常州软件技术培训重写compareTo大概compare方式时,必须要明白对照的要紧前提相等时要对照次要前提。(假设姓名和年纪一致的薪金相像的人, 要是想要对人按照年纪的大小来排序,要是年纪相像的人,必要若何处分?不行干脆return 0,以为可能姓名差别(年纪相像姓名差别的人 是差别的人)。此时就必要举行次要前提校验(必要校验姓名),惟有姓名和年纪同时相等的才可以回笼0.)
通过return 0来校验唯独性。
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Demo4 {
public static void main(String[] args) {
TreeMap<String, Integer> tree = new TreeMap<String, Integer>();
tree.put("张三", 19);
tree.put("李四", 20);
tree.put("王五", 21);
tree.put("赵六", 22);
tree.put("周七", 23);
tree.put("张三", 24);
System.out.println(tree);
System.out.println("张三".compareTo("李四"));//-2094
}
}
自定义元素排序
复制代码
public class Demo3 {
public static void main(String[] args) {
TreeMap<Person, String> hm = new TreeMap<Person, String>(
new MyComparator());
hm.put(new Person("jack", 20), "1001");
hm.put(new Person("rose", 18), "1002");
hm.put(new Person("lucy", 19), "1003");
hm.put(new Person("h毫米", 17), "1004");
hm.put(new Person("ll", 25), "1005");
System.out.println(hm);
System.out.println(hm.put(new Person("rose", 18), "1006"));
Set<Entry<Person, String>> entrySet = hm.entrySet();
Iterator<Entry<Person, String>> it = entrySet.iterator();
while (it.hasNext()) {
Entry<Person, String> next = it.next();
Person key = next.getKey();
String value = next.getValue();
System.out.println(key + " = " + value);
}
}
}
class MyComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
if (p1.getAge() > p2.getAge()) {
return -1;
} else if (p1.getAge() < p2.getAge()) {
return 1;
}
return p1.getName().compareTo(p2.getName());
}
}
class Person implements Comparable<Person> {
private String name;
private int age;
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
public int hashCode() {
return this.name.hashCode() + age * 37;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Person) {
Person p = (Person) obj;
return this.name.equals(p.name) && this.age == p.age;
} else {
return false;
}
}
@Override
public String toString() {
return "Person@name:" + this.name + " age:" + this.age;
}
@Override
public int compareTo(Person p) {
if (this.age > p.age) {
return 1;
} else if (this.age < p.age) {
return -1;
}
return this.name.compareTo(p.name);
}
}
复制代码
常州平台运营留意:Set的元素不行重复,Map的键不行重复,要是存入重复元素若何处分
Set元素重复元素不行存入add方式回笼false
Map的重复健将笼盖旧键,将旧值回笼。
上篇:上一篇:Android Fragment增加 FragmentTransaction
下篇:下一篇:android_button onclick点击的5种写法