Java的集合之Map接口---(英雄联盟的CP例子)从光棍(Collection)变夫妻(Map)
目录
Interface Map
Map接口概述
Map接口和Collection接口的不同
添加功能
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 keySet()
Collection values()
长度功能
int size()
英雄联盟CP案例
案例一 遍历map集合的方式1:根据键找值
案例二 遍历Map集合的方式2:根据键值对对象找键和值
Interface Map<K,V>
查看API文档我们知道:
public interface Map<K,V>将键映射到值的对象。 地图不能包含重复的键; 每个键可以映射到最多一个值。
这个接口取代了Dictionary类,它是一个完全抽象的类而不是接口。
Map界面提供了三个集合视图 ,允许将映射内容视为一组键,值集合或键值映射集合。 地图的顺序被定义为其中在地图上的集合视图迭代返回元素的顺序。 一些地图实现,如TreeMap课程,对他们的订单做出了具体的保证; 其他人,像HashMap班,不要。
注意:如果使用可变对象作为地图键,必须非常小心。 如果对象的值以影响equals比较的方式更改,而对象是地图中的键,则不会指定地图的行为。 这个禁令的一个特殊情况是,地图不允许将自己包含在内。 虽然地图可以将其本身作为一个值,但建议您非常小心: equals和hashCode方法在这样的地图上已经不太明确。
所有通用映射实现类应提供两个“标准”构造函数:一个创建空映射的void(无参数)构造函数,以及一个具有类型为Map的单个参数的构造函数 ,它创建一个具有相同键值的新映射映射作为参数。 实际上,后一个构造函数允许用户复制任何地图,产生所需类的等效地图。 没有办法强制执行此建议(因为接口不能包含构造函数),而JDK中的所有通用映射实现都符合要求。
包含在该界面中的“破坏性”的方法,即,修改其操作地图的方法,被指定抛出UnsupportedOperationException如果此映射不支持该操作。 如果是这种情况,如果调用对地图没有影响,这些方法可能会但不是必须抛出UnsupportedOperationException 。 例如,如果映射映射为“叠加”的地图为空,则可以在不可修改的映射上调用putAll(Map)方法,但不是必须抛出异常。
一些地图实现对它们可能包含的键和值有限制。 例如,一些实现禁止空键和值,有些对键的类型有限制。 尝试插入不合格的键或值会抛出未经检查的异常,通常为NullPointerException或ClassCastException 。 尝试查询不合格键或值的存在可能会引发异常,或者可能只是返回false; 一些实现将展现出前者的行为,一些实现将展现出后者。 更一般来说,尝试对不符合条件的密钥或值的操作,其完成不会导致将不合格元素插入到地图中可能会导致异常或可能成功执行该选项。 此异常在此接口的规范中标记为“可选”。
Collections Framework接口中的许多方法都是按照equals方法定义的。 例如,对于在本说明书containsKey(Object key)方法表示:“返回true当且仅当此映射包含一个键k使得(key==null ? k==null : key.equals(k))的映射。” 该规范不应该被解释为意味着具有非空参数调用key Map.containsKey会导致key.equals(k)被调用的任意键k。 实现可以实现优化,从而避免equals的调用,例如,首先比较两个密钥的哈希码。 ( Object.hashCode()规范保证具有不等的哈希码的两个对象不能相等。)更一般地,各种Collections Framework接口的实现可以随意使用底层Object方法的指定行为,无论执行者认为适当。
执行递归遍历地图的一些地图操作可能会失败,并且地图直接或间接包含自身的自引用实例有异常。 这包括
clone()
,equals()
,hashCode()
和toString()
方法。 实现可以可选地处理自引用场景,然而大多数当前实现不这样做。此接口是成员Java Collections Framework 。
通过观察API文档我们得出结论:
Map接口概述
- 将键(key)映射到值(value)的对象
- 一个映射不能包含重复的键
- 没个键最多只能映射到一个值
Map接口和Collection接口的不同
- Map是双列的,Collection是单列的
- Map集合中存储的元素都是成双成对出现的,Map元素的键是唯一的,值是可以重复的,键值对有其它的称呼:夫妻对
- Collection接口中的元素都是单独出现的,Collection接口下面有个子接口Set元素是唯一的List集合中的元素是可以重复的,像这样单独出现的元素,有其它的称呼:光棍
添加功能
V put(K key, V value)
查看API文档我们知道:
V put(K key,V value)将指定的值与该映射中的指定键相关联(可选操作)。 如果映射先前包含了密钥的映射,则旧值将被指定的值替换。 (映射m被认为包含关键字的映射k当且仅当m.containsKey(k)将返回true )。
参数
key
- 指定值与之关联的键
value
- 与指定键相关联的值结果
前一个值与key相关联 ,或null,如果没有key的映射。 (A null返回也可以表示该地图以前关联的null与key ,如果实现支持null的值)
异常
UnsupportedOperationException
-如果 put操作不受此地图支持
ClassCastException
- 如果指定的键或值的类阻止它存储在此映射中
NullPointerException
- 如果指定的键或值为空,并且此映射不允许空值或值
IllegalArgumentException
- 如果指定键或值的某些属性阻止其存储在此映射中
将指定的值与该映射中的指定键相关联(可选操作)
参考代码1:
import java.util.HashMap;public class MapPutDermo1 {public static void main(String[] args) {//创建一个Map集合对象HashMap<String, String> sshm = new HashMap<>();//添加元素// V put(K key, V value)将指定的值与该映射中的指定键相关联(可选操作)。//返回的是该键对应被覆盖的值,多次添加同一个key的映射的时候key只有一个,值被覆盖。System.out.println(sshm.put("盖伦","卡特"));System.out.println(sshm.put("盖伦","卡特"));System.out.println(sshm.put("盖伦","卡特2"));System.out.println(sshm.put("盖伦","卡特3"));}
}
输出结果:
null
卡特
卡特
卡特2
通过运行结果我们发现 :返回的是该键对应被覆盖的值,多次添加同一个key的映射的时候key只有一个,值被覆盖。
参考代码2:
import java.util.HashMap;public class MapPutDermo1 {public static void main(String[] args) {//创建一个Map集合对象HashMap<String, String> sshm = new HashMap<>();//添加元素// V put(K key, V value)将指定的值与该映射中的指定键相关联(可选操作)。//返回的是该键对应被覆盖的值,多次添加同一个key的映射的时候key只有一个,值被覆盖。sshm.put("盖伦","卡特");sshm.put("EZ","宝石");sshm.put("洛","霞");sshm.put("卢锡安","塞纳");sshm.put("卢锡安","塞纳1");sshm.put("卢锡安","塞纳2");System.out.println(sshm);}
}
输出结果:
{卢锡安=塞纳2, EZ=宝石, 洛=霞, 盖伦=卡特}
通过运行结果我们发现:当key值相同时,值会被覆盖。
删除功能
void clear()
查看API文档我们知道:
void clear()从该地图中删除所有的映射(可选操作)。 此呼叫返回后,地图将为空。
异常
UnsupportedOperationException
-如果 clear操作不受此地图支持
从map中删除所有的映射(可选操作)
参考代码:
import java.util.HashMap;public class MapClearDermo1 {public static void main(String[] args) {//创建一个Map集合对象HashMap<String, String> sshm = new HashMap<>();//添加元素// V put(K key, V value)将指定的值与该映射中的指定键相关联(可选操作)sshm.put("盖伦","卡特");sshm.put("EZ","宝石");sshm.put("洛","霞");sshm.put("卢锡安","塞纳");sshm.put("卢锡安","塞纳1");sshm.put("卢锡安","塞纳2");System.out.println(sshm);System.out.println("\n================\n");//void clear()从该map中删除所有的映射(可选操作)sshm.clear();System.out.println(sshm);}
}
输出结果:
{卢锡安=塞纳2, EZ=宝石, 洛=霞, 盖伦=卡特}
================
{}
通过我们输出结果我们得出结论:void clear()删除的是所有映射(可选操作)
V remove(Object key)
查看API文档我们知道:
V remove(Object key)如果存在(从可选的操作),从该地图中删除一个键的映射。 更正式地,如果该映射包含从关键字k到值v的映射,使得
(key==null ? k==null : key.equals(k))
,该映射被去除。 (地图最多可以包含一个这样的映射。)返回此地图先前相关联的密钥,或null如果映射包含该键的映射值。
如果此映射允许空值,那么null返回值并不一定表明此映射不包含该键的映射关系; 地图也可能显式地将密钥映射到null 。
一旦呼叫返回,该映射将不包含指定键的映射。
参数
key
- 其映射将从地图中删除的密钥结果
前一个值与 key相关联 ,或 null,如果没有 key的映射。
异常
UnsupportedOperationException
-如果 remove操作不受此地图支持
ClassCastException
- 如果密钥对于此地图是不合适的类型( optional )
NullPointerException
- 如果指定的键为空,并且此映射不允许空键( optional )
如果存在(从可选的操作),从该地图中删除一个键的映射
参考代码:
import java.util.HashMap;public class MapRemoveDermo1 {public static void main(String[] args) {//创建一个Map集合对象HashMap<String, String> sshm = new HashMap<>();//添加元素// V put(K key, V value)将指定的值与该映射中的指定键相关联(可选操作)。sshm.put("盖伦","卡特");sshm.put("EZ","宝石");sshm.put("洛","霞");sshm.put("卢锡安","塞纳");sshm.put("卢锡安","塞纳1");sshm.put("卢锡安","塞纳2");System.out.println(sshm);System.out.println("\n================\n");//V remove(Object key)如果存在(从可选的操作),从该地图中删除一个键的映射//key不存在的时候不会报错,返回的是被删除的key对应的值,并且从map集合中移除System.out.println(sshm.remove("EZ"));System.out.println(sshm);}
}
输出结果:
{卢锡安=塞纳2, EZ=宝石, 洛=霞, 盖伦=卡特}
================
宝石
{卢锡安=塞纳2, 洛=霞, 盖伦=卡特}
通过输出结果我们得出结论:key不存在的时候不会报错,返回的是被删除的key对应的值,并且从map集合中移除
判断功能
boolean containsKey(Object key)
查看API文档我们知道:
boolean containsKey(Object key)如果此映射包含指定键的映射,则返回true 。 更正式地,返回true当且仅当该地图包含关键字k的映射,使得(key==null ? k==null : key.equals(k)) 。 (最多可以有一个这样的映射。)
参数
key
- 要在此地图中存在的密钥要进行测试结果
true如果此映射包含指定键的映射
异常
ClassCastException
- 如果密钥对于该地图是不合适的类型( optional )
NullPointerException
- 如果指定的键为空,并且此映射不允许空键( optional )
如果此映射包含指定键的映射,则返回true
参考代码:
import java.util.HashMap;public class MapContainsKeyDermo1 {public static void main(String[] args) {//创建一个Map集合对象HashMap<String, String> sshm = new HashMap<>();//添加元素// V put(K key, V value)将指定的值与该映射中的指定键相关联(可选操作)。sshm.put("盖伦","卡特");sshm.put("EZ","宝石");sshm.put("洛","霞");sshm.put("卢锡安","塞纳");sshm.put("卢锡安","塞纳1");sshm.put("卢锡安","塞纳2");System.out.println(sshm);System.out.println("\n================\n");//boolean containsKey(Object key)如果此映射包含指定键的映射,则返回true 。System.out.println(sshm.containsKey("盖伦"));System.out.println(sshm.containsKey("洛"));System.out.println(sshm.containsKey("佛耶戈"));}
}
输出结果:
{卢锡安=塞纳2, EZ=宝石, 洛=霞, 盖伦=卡特}
================
true
true
false
通过输出结果我们得出结论:containsKey就是返回映射的键(key)
boolean containsValue(Object value)
查看API文档我们知道:
boolean containsValue(Object value)如果此映射将一个或多个键映射到指定的值,则返回true 。 更正式地,返回true当且仅当此映射包含至少一个映射到值v ,使得(value==null ? v==null : value.equals(v)) 。 对于Map接口的大多数实现,此操作对于地图大小可能需要时间线性。
参数
value
- 要在此地图中存在的值要进行测试结果
true如果该地图将一个或多个键映射到指定的值
异常
ClassCastException
- 如果该值对于该地图是不合适的类型( optional )
NullPointerException
- 如果指定的值为空,并且此映射不允许空值( optional )
如果此映射将一个或多个键映射到指定的值,则返回true
参考代码:
import java.util.HashMap;public class MapContainsValueDermo1 {public static void main(String[] args) {//创建一个Map集合对象HashMap<String, String> sshm = new HashMap<>();//添加元素// V put(K key, V value)将指定的值与该映射中的指定键相关联(可选操作)。sshm.put("盖伦","卡特");sshm.put("EZ","宝石");sshm.put("洛","霞");sshm.put("卢锡安","塞纳");sshm.put("卢锡安","塞纳1");sshm.put("卢锡安","塞纳2");System.out.println(sshm);System.out.println("\n================\n");// boolean containsValue(Object value)如果此映射将一个或多个键映射到指定的值,则返回true System.out.println(sshm.containsValue("宝石"));System.out.println(sshm.containsValue("塞纳"));System.out.println(sshm.containsValue("塞纳2"));System.out.println(sshm.containsValue("伊苏尔德"));}
}
输出结果:
{卢锡安=塞纳2, EZ=宝石, 洛=霞, 盖伦=卡特}
================
true
false
true
false
通过输出结果我们得出结论:containsValue就是返回映射的值(value)
boolean isEmpty()
查看API文档我们知道:
boolean isEmpty()如果此地图不包含键值映射,则返回 true 。
结果
true如果此映射不包含键值映射
如果此map不包含键值映射,则返回 true
参考代码:
import java.util.HashMap;public class MapContainsValueDermo1 {public static void main(String[] args) {//创建一个Map集合对象HashMap<String, String> sshm = new HashMap<>();//添加元素// V put(K key, V value)将指定的值与该映射中的指定键相关联(可选操作)。sshm.put("盖伦","卡特");sshm.put("EZ","宝石");sshm.put("洛","霞");sshm.put("卢锡安","塞纳");sshm.put("卢锡安","塞纳1");sshm.put("卢锡安","塞纳2");System.out.println(sshm);System.out.println("\n================\n");//boolean isEmpty()如果此map不包含键值映射,则返回 trueSystem.out.println(sshm.isEmpty());//从该map中删除所有的映射sshm.clear();System.out.println(sshm.isEmpty());}
}
输出结果:
{卢锡安=塞纳2, EZ=宝石, 洛=霞, 盖伦=卡特}
================
false
true
通过输出结果我们得出结论:isEmpty()就是判断map键值映射是否为空,如果为空返回ture,反之如果不为空返回false,我们使用用clear删除map中所有映射验证了
获取功能
V get(Object key)
查看API文档我们知道:
V get(Object key)返回到指定键所映射的值,或
null
如果此映射包含该键的映射。更正式地,如果该映射包含从键
k
到值v
,使得(key==null ? k==null : key.equals(k))
,则该方法返回v
; 否则返回null
。 (最多可以有一个这样的映射。)如果此映射允许空值,则返回值
null
并不一定表明该映射不包含该键的映射关系; 地图也可能明确地将密钥映射到null
。 可以使用containsKey操作来区分这两种情况。参数
key
- 要返回其关联值的键结果
指定键映射到的值,如果此映射不包含键的映射,
null
异常
ClassCastException
- 如果密钥是该地图不合适的类型( optional )
NullPointerException
- 如果指定的键为空,并且此映射不允许空键( optional )
返回到指定键所映射的值,或null
如果此映射包含该键的映射
参考代码:
import java.util.HashMap;public class MapGetDemo {public static void main(String[] args) {//创建map集合对象HashMap<String, String> sshm = new HashMap<>();//添加元素sshm.put("蛮王","艾希");sshm.put("孙悟空","阿狸");sshm.put("普朗克","俄洛伊");sshm.put("雷恩加尔","奈德丽");//V get(Object key)返回到指定键所映射的值,或null如果此映射包含该键的映射//如果map中不包含该键,返回的是nullSystem.out.println(sshm.get("普朗克"));System.out.println(sshm.get("雷恩加尔"));System.out.println(sshm.get("亚索"));}
}
输出结果:
俄洛伊
奈德丽
null
通过运行结果我们得出结论: 如果该映射包含从键k
到值v
,使得(key==null ? k==null : key.equals(k))
,则该方法返回v
; 否则返回null
。 (最多可以有一个这样的映射。)
我们分别get了普朗克、雷恩加尔、亚索,键值映射里获取到了普朗克的老婆俄洛伊、雷恩加尔的老婆奈德丽、键值映射里没有亚索的老婆,可怜的亚索是个光棍。
Set<K> keySet()
查看API文档我们知道:
Set<K> keySet()返回此地图中包含的键的Set视图。 该集合由地图支持,因此对地图的更改将反映在集合中,反之亦然。 如果在集合中的迭代正在进行中修改映射(除了通过迭代器自己的remove操作),迭代的结果是未定义的。 该组支持元件移除,即从映射中相应的映射,经由Iterator.remove,Set.remove,removeAll,retainAll和clear操作。 它不支持add或addAll操作。
结果
该地图中包含的键的集合视图
返回此地图中包含的键的Set视图
参考代码:
import java.util.HashMap;
import java.util.Set;public class MapGetDemo {public static void main(String[] args) {//创建map集合对象HashMap<String, String> sshm = new HashMap<>();//添加元素sshm.put("蛮王","艾希");sshm.put("孙悟空","阿狸");sshm.put("普朗克","俄洛伊");sshm.put("雷恩加尔","奈德丽");//Set<K> keySet()返回此map中包含的键的Set视图Set<String> strings = sshm.keySet();for (String s : strings) {System.out.println(s);}}
}
输出结果:
雷恩加尔
孙悟空
蛮王
普朗克
通过输出结果我们得出结论:keySet()返回的就是此map中包含的键(key)
Collection<V> values()
查看API文档我们知道:
Collection<V> values()返回此地图中包含的值的Collection视图。 集合由地图支持,因此对地图的更改将反映在集合中,反之亦然。 如果在集合中的迭代正在进行中修改映射(除了通过迭代器自己的remove操作),迭代的结果是未定义的。 该collection支持元素移除,即从映射中相应的映射,经由Iterator.remove,Collection.remove,removeAll,retainAll和clear操作。 它不支持add或addAll操作。
结果
该地图中包含的值的集合视图
返回此地图中包含的值的Collection视图
参考代码:
import java.util.Collection;
import java.util.HashMap;public class MapGetDemo {public static void main(String[] args) {//创建map集合对象HashMap<String, String> sshm = new HashMap<>();//添加元素sshm.put("蛮王","艾希");sshm.put("孙悟空","阿狸");sshm.put("普朗克","俄洛伊");sshm.put("雷恩加尔","奈德丽");//Collection<V> values()返回此地图中包含的值的Collection视图Collection<String> values = sshm.values();for (String s : values) {System.out.println(s);}}
}
输出结果:
奈德丽
阿狸
艾希
俄洛伊
通过输出结果我们得出结论:values()返回的就是此map中包含的值(value)
长度功能
int size()
查看API文档我们知道:
int size()返回此地图中键值映射的数量。 如果地图包含超过Integer.MAX_VALUE个元素,则返回Integer.MAX_VALUE 。
结果
该地图中键值映射的数量
返回此地图中键值映射的数量
参考代码:
import java.util.HashMap;public class MapGetDemo {public static void main(String[] args) {//创建map集合对象HashMap<String, String> sshm = new HashMap<>();//添加元素sshm.put("蛮王","艾希");sshm.put("孙悟空","阿狸");sshm.put("普朗克","俄洛伊");sshm.put("雷恩加尔","奈德丽");//int size()返回此地图中键值映射的数量System.out.println(sshm);System.out.println("map集合中键值对的个数为:" + sshm.size());}
}
输出结果:
{雷恩加尔=奈德丽, 孙悟空=阿狸, 蛮王=艾希, 普朗克=俄洛伊}
map集合中键值对的个数为:4
通过输出结果我们得出结论:size()就是获取此map键值对映射的数量
英雄联盟CP案例
案例一 遍历map集合的方式1:根据键找值
分析:
1、获取Map集合中所有映射的键Set集合
2、遍历键的集合根据键找对应的值
3、输出
参考代码:
/*遍历map集合的方式1:根据键找值1、获取Map集合中所有映射的键的Set集合2、遍历键的集合,根据键找对应的值3、输出*/
import java.util.HashMap;
import java.util.Set;public class MapTest1 {public static void main(String[] args) {//创建map集合对象HashMap<String, String> sshm = new HashMap<>();//添加英雄联盟CP到集合中sshm.put("布里茨(蒸汽机器人)","奥莉安娜(发条魔灵)");sshm.put("德莱文(荣耀行刑官)","迦娜(风暴之怒)");sshm.put("阿木木(殇之木乃伊)","安妮(黑暗之女)");sshm.put("科加斯(虚空恐惧)","塞克雷(虚空遁地兽)");sshm.put("金克斯(暴走萝莉)","蔚(皮城执法官)");//获取Map集合中所有映射的键Set集合Set<String> keySet = sshm.keySet();//使用增强for循环遍历Map集合for (String key : keySet) {String value = sshm.get(key);System.out.println(key + "----CP----" + value);}}
}
输出结果:
布里茨(蒸汽机器人)----CP----奥莉安娜(发条魔灵)
金克斯(暴走萝莉)----CP----蔚(皮城执法官)
阿木木(殇之木乃伊)----CP----安妮(黑暗之女)
科加斯(虚空恐惧)----CP----塞克雷(虚空遁地兽)
德莱文(荣耀行刑官)----CP----迦娜(风暴之怒)
现在你知道英雄联盟这些CP关系了吗?
案例二 遍历Map集合的方式2:根据键值对对象找键和值
分析:
1、获取所有键值对的集合
2、遍历获取每一个键值对,得到每一个键值对对象
3、根据获取到的每一个键值对对象,来进一步获取键和值
参考代码:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;/*遍历Map集合的方式2:根据键值对对象找键和值1、获取所有键值对的集合2、遍历获取每一个键值对,得到每一个键值对对象3、根据获取到的每一个键值对对象,来进一步获取键和值*/
public class MapTest2 {public static void main(String[] args) {//创建map集合对象HashMap<String, String> sshm = new HashMap<>();//添加英雄联盟CP到集合中sshm.put("崔斯特(卡牌大师)","伊芙琳(寡妇制造者)");sshm.put("提莫(迅捷斥候)","麦林炮手(崔丝塔娜)");sshm.put("扭曲树精(茂凯)","荆棘之兴(婕拉)");sshm.put("奥瑞利安.索尔(铸星龙王)","希瓦娜(龙血武姬)");sshm.put("伊泽瑞尔(探险家)","伊泽瑞尔(探险家)");//获取所有键值对的集合Set<Map.Entry<String, String>> entries = sshm.entrySet();//使用增强for循环遍历map集合for (Map.Entry<String, String> keyValue : entries) {//HashMap中重写了getKey()和getValue()方法String key = keyValue.getKey();String value = keyValue.getValue();System.out.println(key + "----CP----" + value);}}
}
输出结果:
崔斯特(卡牌大师)----CP----伊芙琳(寡妇制造者)
提莫(迅捷斥候)----CP----麦林炮手(崔丝塔娜)
奥瑞利安.索尔(铸星龙王)----CP----希瓦娜(龙血武姬)
扭曲树精(茂凯)----CP----荆棘之兴(婕拉)
伊泽瑞尔(探险家)----CP----伊泽瑞尔(探险家)
比较案例一和案例二结果,结果输出效果都一样,建议以后做开发使用第二种方法遍历map集合
现在你知道英雄联盟这些CP关系了吗?
༼ つ ◕_◕ ༽つ到底啦!给靓仔点个关注吧!
Java的集合之Map接口---(英雄联盟的CP例子)从光棍(Collection)变夫妻(Map)相关推荐
- Java中集合遍历方式(List、Set、Queue、Deque、Stack、Map)
什么是集合?通俗的讲,集合就是存储一组数据的容器,那么,相比较于同样是存储数据的数组,集合的优势就体现在集合的长度是可变的,而数组的长度是固定的.在我们常见的集合中,主要有两大类: Collectio ...
- Java网络编程UDP协议--模拟英雄联盟游戏聊天骂人变*--优化网络环境从你我做起
模拟英雄联盟聊天功能:实现客户端与服务器(一对一)的聊天功能,客户端首先发起聊天,输入的内容在服务器端和客户端显示,然后服务器端也可以输入信息,同样信息在客户端和服务端显示. 本案使用了正则表达式将接 ...
- 程序员大佬Java开发大型3D游戏,英雄联盟、王者荣耀算什么!
落樱(LuoYing)是一个用于简化3D角色扮演游戏开发的游戏框架,该项目基于Java及JME3(JMonkeyEngine)进行开发,兼容JME,创建的游戏可以跨多个平台发布(Window\Linu ...
- Java的泛型---(英雄联盟集合嵌套案例)
目录 Java的泛型 JDK1.5以后出现的机制 为什么会有泛型呢? 泛型 泛型类 泛型方法 泛型接口 泛型通配符 ?extends E ?superE 增强for 泛型类的测试 泛型方法的测试 泛型 ...
- Java基础学习——Java集合(九)Map接口、HashMap、LinkedHashMap实现类、TreeMap实现类
一.Map接口 二.HashMap实现类.LinkedHashMap实现类 1.HashMap的特点 1)无序,唯一(key唯一,因为底层key按照哈希表(数组+链表)的结构) 2)放入集合的数据的类 ...
- java:Map接口
Map Map接口的概述 将键映射到值的对象. Map不能包含重复的键; 每个键可以映射到最多一个值. 举例: <K,V> 键值对 1001 王宇 1002 周家祥 1001 周家祥(不允 ...
- Java学习 --集合和数组
集合和数组: 都是对多个数据进行存储操作的结构,加成java容器. 数组存储的特点: 一旦初始化以后,长度就确定了,元素类型也就确定了.对于指定一个数组,我们只能操作指定类型的数据. 数组存储数据是有 ...
- 以《英雄联盟》为例,看影响MOBA游戏策略的3个层面
从<星际争霸>中的"Aeon of Strife"这张地图开创"MOBA"这一概念以来,经过20年左右的发展,MOBA游戏从画面.内容到理论体系都出 ...
- java 实现hashmap_Java集合(十)实现Map接口的HashMap
Java集合(十)继承Map接口的HashMap 一.HashMap简介(基于JDK1.8) HashMap是基于哈希表(散列表),实现Map接口的双列集合,数据结构是"链表散列" ...
最新文章
- Centos6.8 Mysql 设置自动备份与定期删除备份文件 自测部署安装
- 为多网络请个“交警”
- [Reverse] - 百度杯”CTF比赛 2017 二月场-CrackMe-1
- MULTI BIN的wince 5.0,smdk2440下的实现
- 损失函数_SRGAN损失函数(目标函数)详解
- mysql 半同步_mysql 主从同步 与 半同步
- 双精度数举例_c语言中,常量,变量,浮点,单精度,双精度是什么意思?举例...
- python-文件操作(1)
- Mysql更新字段中部分数据的方法
- 计算机应用基础0035形考答案,计算机应用基础0035形考答案
- Linux知识点小结--精华总结
- 原生js获取cookie
- 蚁群算法原理介绍,算法框架以及代码实现
- MATLAB加入螺旋相位板调制,螺旋相位板原理及使用手册
- 云打印微信小程序,自助打印机,无人打印
- 领域驱动模型设计(一)
- activemq_CVE-2015-5254_漏洞复现_源码分析
- pip镜像网站及使用方法
- 黑苹果简单的手动开启显示器HiDPI教程
- 【电子学会】2020年09月图形化二级 -- 货运飞船