章丘市建设局网站互联网推广外包

当前位置: 首页 > news >正文

章丘市建设局网站,互联网推广外包,营销策划公司名字大全,广州高端网页制作1.概念及场景 Map和set是一种专门用来进行搜索的容器或者数据结构#xff0c;其搜索的效率与其具体的实例化子类有关。 在此之前#xff0c;我还接触过直接查询O(N)和二分查询O(logN)#xff0c;这两个查询有很多不足之出#xff0c;直接查询的速率太低#xff0c;而二分查… 1.概念及场景 Map和set是一种专门用来进行搜索的容器或者数据结构其搜索的效率与其具体的实例化子类有关。 在此之前我还接触过直接查询O(N)和二分查询O(logN)这两个查询有很多不足之出直接查询的速率太低而二分查询在使用时要求序列是有序的。 例如  根据姓名查询考试成绩通讯录即根据姓名查询联系方式不重复集合即需要先搜索关键字是否已经在集合中可能在查找时进行一些插入和删除的操作即动态查找那上述两种方式就不太适合了。 2. 模型 一般把搜索的数据称为关键字Key和关键字对应的称为值Value将其称之为Key-value的键值对所以模型会有两种 1. 纯 key 模型比如 有一个英文词典快速查找一个单词是否在词典中快速查找某个名字在不在通讯录中2. Key-Value 模型比如 统计文件中每个单词出现的次数统计结果是每个单词都有与其对应的次数单词单词出现的次数梁山好汉的江湖绰号每个好汉都有自己的江湖绰号而Map中存储的就是key-value的键值对Set中只存储了Key  3.Map的使用 3.1关于Map的说明 Map是一个接口类该类没有继承自Collection该类中存储的是K,V结构的键值对并且K一定是唯一的不能重复。 将元素输入到Map当中 public static void main(String[] args) {MapCharacter,Integer mapnew HashMap();char[] testCh{A,B,D,A,E,H};for (char ch:testCh) {//如果输入的这个key是空就让他value等于1if(map.get(ch) null) {map.put(ch,1);}else {//如果输入的这个key是不为空就让他value加1int val map.get(ch);map.put(ch,val1);}}} 3.2 关于Map.EntryK, V的说明 Map.EntryK, V 是Map内部实现的用来存放key, value键值对映射关系的内部类该内部类中主要提供了key, value的获取value的设置以及Key的比较方式。 方法解释K getKey()返回 entry 中的 keyV getValue()返回 entry 中的 valueV setValue(V value)将键值对中的value替换为指定value public static void main(String[] args) {MapCharacter,Integer mapnew HashMap();char[] testCh{A,B,D,A,E,H};for (char ch:testCh) {if(map.get(ch) null) {map.put(ch,1);}else {int val map.get(ch);map.put(ch,val1);}}// getValue()和 getKey()方法的使用//以及Entry的使用方法for (Map.Entry x:map.entrySet()) {System.out.println(key: x.getKey() value: x.getValue());}} 注意Map.EntryK,V并没有提供设置Key的方法 3.3 Map 的常用方法说明 方法返回值类型  函数命解释V get(Object key)返回 key 对应的 valueV getOrDefault(Object key, V defaultValue)返回 key 对应的 valuekey 不存在返回默认值V put(K key, V value)设置 key 对应的 valueV remove(Object key)删除 key 对应的映射关系SetK  keySet()返回所有 key 的不重复集合CollectionV  values()返回所有 value 的可重复集合SetMap.EntryK, V  entrySet()返回所有的 key-value 映射关系boolean containsKey(Object key)判断是否包含 keyboolean containsValue(Object value)判断是否包含value public static void main(String[] args) {MapCharacter,Integer mapnew HashMap();char[] testCh{A,B,D,A,E,H};for (char ch:testCh) {if(map.get(ch) null) {map.put(ch,1);}else {int val map.get(ch);map.put(ch,val1);}}System.out.println(get()方法 Map中有key值 map.get(A));System.out.println(get()方法 Map中没有有key值 map.get(F));System.out.println(getOrDefault(Object key, V defaultValue)方法 存在返回valuemap.getOrDefault(A,10));System.out.println(getOrDefault(Object key, V defaultValue)方法 不存在返回默认值map.getOrDefault(F,10));map.put(A,11);System.out.println(put() 设置key的value值 现在A的值map.get(A));System.out.println(删除前map);map.remove(B);System.out.println(删除后map);Set a map.keySet();System.out.println(所有 key 的不重复集合 a);for (Map.Entry x:map.entrySet()) {System.out.println(key: x.getKey() value: x.getValue());}System.out.println(判断是否包含key(包含ture 不包含false) map.containsKey(A));System.out.println(判断是否包含key(包含ture 不包含false) map.containsValue(11));} 运行结果 注意 Map是一个接口不能直接实例化对象如果要实例化对象只能实例化其实现类TreeMap或者HashMap。Map中存放键值对的Key是唯一的value是可以重复的。在TreeMap中插入键值对时key不能为空否则就会抛NullPointerException异常value可以为空。但是HashMap的key和value都可以为空。Map中的Key可以全部分离出来存储到Set中来进行访问(因为Key不能重复)。Map中的value可以全部分离出来存储在Collection的任何一个子集合中(value可能有重复)。Map中键值对的Key不能直接修改value可以修改如果要修改key只能先将该key删除掉然后再来进行重新插入。TreeMap和HashMap的区别。 Map底层结构TreeMapHashMap底层结构红黑树哈希桶插入/删除/查找时间 复杂度O(1)是否有序关于Key有序无序线程安全不安全不安全插入/删除/查找区别需要进行元素比较通过哈希函数计算哈希地址比较与覆写key必须能够比较否则会抛出 ClassCastException异常自定义类型需要覆写equals和 hashCode方法应用场景需要Key有序场景下Key是否有序不关心需要更高的 时间性能 4.Set 的说明 Set与Map主要的不同有两点Set是继承自Collection的接口类Set中只存储了Key。  4.1常见方法说明 方法解释boolean add(E e)添加元素但重复元素不会被添加成功void clear()清空集合boolean contains(Object o)判断 o 是否在集合中IteratorE iterator()返回迭代器boolean remove(Object o)删除集合中的 oint size()返回set中元素的个数boolean isEmpty()检测set是否为空空返回true否则返回falseObject[] toArray()将set中的元素转换为数组返回boolean containsAll(Collection? c)集合c中的元素是否在set中全部存在是返回true否则返回 falseboolean addAll(Collection? extendsE c)将集合c中的元素添加到set中可以达到去重的效果 public static void main(String[] args) {SetInteger setnew HashSet();int[] testArray{1,2,3,2,4,5,2,22,113,5,2,1};//add()函数使用for (int x:testArray) {set.add(x);}System.out.println(判断 o 是否在集合中(包含ture 不包含false) set.contains(2));System.out.println(删除前 set);System.out.println(删除集合中的 o set.remove(113));System.out.println(删除后 set);System.out.println(返回set中元素的个数:set.size());System.out.println(检测set是否为空(空返回true否则返回false) set.isEmpty());} 运行结果 注意 Set是继承自Collection的一个接口类Set中只存储了key并且要求key一定要唯一TreeSet的底层是使用Map来实现的其使用key与Object的一个默认对象作为键值对插入到Map中的Set最大的功能就是对集合中的元素进行去重实现Set接口的常用类有TreeSet和HashSet还有一个LinkedHashSetLinkedHashSet是在HashSet的基础上维护了一个双向链表来记录元素的插入次序。Set中的Key不能修改如果要修改先将原来的删除掉然后再重新插入TreeSet中不能插入null的keyHashSet可以。TreeSet和HashSet的区 Set底层结构TreeSetHashSet底层结构红黑树哈希桶插入/删除/查找时间 复杂度O(1)是否有序关于Key有序不一定有序线程安全不安全不安全插入/删除/查找区别按照红黑树的特性来进行插入和删除1. 先计算key哈希地址 2. 然后进行 插入和删除比较与覆写key必须能够比较否则会抛出 ClassCastException异常自定义类型需要覆写equals和 hashCode方法应用场景需要Key有序场景下Key是否有序不关心需要更高的 时间性