wordpress上传网站模板,在线设计公司logo图标,上海高端网站开发站霸网络,游戏开发团队今天带来map和set的详解#xff0c;保证大家分清楚 一#xff0c;概念
map和set是一种专门用来搜索的容器或数据结构
map能存储两个数据类型#xff0c;我们称之为key-value模型
set只能存储一个数据类型#xff0c;我们称之为纯key模型
它们的效率都非… 今天带来map和set的详解保证大家分清楚 一概念
map和set是一种专门用来搜索的容器或数据结构
map能存储两个数据类型我们称之为key-value模型
set只能存储一个数据类型我们称之为纯key模型
它们的效率都非常非常高我们来一个一个了解。
二详解map
1map的说明
map是一个接口所以我们不能直接创建map对象我们可以使用Treemap和HashMap我们先不讲treemap和Hashmap底层是怎么实现的我们先只需要了解他们怎么使用就行后期还是要学treeMap的底层是使用红黑树来实现的而Hashmap底层是哈希表哈希表由一系列哈希桶组层也很难后期要掌握。
2map中的具体方法
V put(K key, V value) 设置 key 对应的 value 开头V的意思是返回value的类型。 这个方法是添加元素注意实现的对象在treemap的时候k是不可以存null的而Hashset是可以存null的因为treemap底层的红黑树涉及比较而Hashset主要是根据哈希函数查找 key值如果相同的话后添加的会把map中已经存在的key值对应的value覆盖掉而不同key值间的value是可以相同的。 MapString,Integer map new HashMap();map.put(ujm,12321);map.put(abs,12321);map.put(tdh,12321);map.put(yre,12321); 我们来向map中添加键值对来调试 成功添加了键值对。
V remove(Object key) 删除 key 对应的映射关系 map中的删除方法map中的key值是不可以修改的只能进行删除操作之后再重新修改。 map.remove(ujm);map.remove(abs);map.remove(tdh);map.remove(yre); 我们看到了map中不含任何元素了。
V get(Object key) 返回 key 对应的 value 我们使用get方法来获取key———对应的value值就是我们的查找了。 我们查找刚才添加元素的abs. int a map.get(abs);System.out.println(a); 我们成功找到了abs字符串
V getOrDefault(Object key, V defaultValue) 返回 key 对应的 valuekey 不存在返回默认值 但是我们这次如果没有找到对应的key,就返回我们设定的值 int a map.getOrDefault(bswr,1000);System.out.println(a); Set keySet()返回所有 key 的不重复集合 我们用keySet()方法来获得map中的所有key MapString,Integer map new HashMap();map.put(ujm,12321);map.put(abs,12321);map.put(tdh,12321);map.put(yre,12321);SetString set map.keySet(); 那么value呢
Collection values()返回所有 value 的可重复集合 我们用这个方法来获得所有的value MapString,Integer map new HashMap();map.put(ujm,12321);map.put(abs,12321);map.put(tdh,12321);map.put(yre,12321);CollectionInteger collection map.values(); Map.Entryk,v 这是map中提供的一个获取键值对的类我们可以通过这个类来获得k,v的值我们还可以将v替换成其他的v值我们经常使用这个类来遍历的打印键值对。 这个类中有三个方法
K getKey() 返回 entry 中的 key
V getValue() 返回 entry 中的 value
V setValue(V value) 将键值对中的value替换为指定value
这里先不介绍。
SetMap.Entryk,v entrySet() 返回所有的 key-value 映射关系 我们创建一个set类型,Set类型的具体数据类型是我们的键值对类型我们对map进行.entry Set() 传给我们的set类型我们就得到我们所有的键值对关系这个是最重要的。 MapString,Integer map new HashMap();map.put(ujm,4647);map.put(abs,123);map.put(tdh,1351);map.put(yre,6856);SetMap.EntryString,Integer set map.entrySet();for (Map.EntryString,Integer entry1 : set){System.out.println(entry1);} 我们使用for each遍历, 成功打印所以的键值对。
boolean containsKey(Object key) 判断是否包含 key 在map中找key找到返回true没有返回false boolean a map.containsKey(abs);System.out.println(a);a map.containsKey(scawcw);System.out.println(a); boolean containsValue(Object value)判断是否包含 value 在map中找value找到返回true没有返回false boolean b map.containsValue(123);System.out.println(b);b map.containsValue(213124);System.out.println(b); Map底层结构TreeMapHashMap底层结构红黑树哈希桶插入/删除/查找时间 复杂度O(log2n)O(1)是否有序关于key有序无序线程安全不安全不安全插入/删除/查找区别需要进行元素比较需要哈希函数计算地址比较与覆写不可以放null会抛异常需要覆写HashCode和equals函数应用场景key有序最好不关心开辟大量内存换取时间 三详解set
1.set的说明
Set也是一个接口我们要想创建对象就要使用TreeSetHashSetSet是纯key模型不能重复我们常常使用Set来去重。
2.set中的具体方法
boolean add(E e) 添加元素但重复元素不会被添加成功 向set中添加元素set中的key不能重复 SetInteger set new HashSet();set.add(13);set.add(46);set.add(768); 我们看到set中成功添加了三个元素
void clear() 清空集合
set.add(13);set.add(46);set.add(768);set.add(2);set.clear(); boolean contains(Object o) 判断 o 是否在集合中 SetInteger set new HashSet();set.add(13);set.add(46);set.add(768);set.add(2);boolean a set.contains(12);boolean b set.contains(2);System.out.println(a b); boolean remove(Object o)
set.remove(13); 移除13。
Iterator iterator() 返回迭代器 这个方法我们主要用来遍历打印我们的Set因为set实现了我们的Iterator接口 IteratorInteger iterator set.iterator();while (iterator.hasNext()){System.out.println(iterator.next());} 其他方法 Set底层结构TreeSetHashSet底层结构红黑树哈希桶插入/删除/查找时间 复杂度O(log2n)O(1)是否有序关于key有序无序线程安全不安全不安全插入/删除/查找区别需要进行元素比较需要哈希函数计算地址比较与覆写不可以放null会抛异常需要覆写HashCode和equals函数应用场景key有序最好不关心开辟大量内存换取时间
四练题 好了终于讲完我们的基础了我们来三道小练习题 1给一组元素统计元素出现的次数
2给定一组元素去重
3找到一组数据中第一个重复的数据1 给一组元素统计元素出现的次数 int[] arr new int[]{23,352,46,47,84,1,44,6,1,23};MapInteger,Integer map new HashMap();for (int i 0; i arr.length; i) {if(map.get(arr[i])null){map.put(arr[i],1);}else {map.put(arr[i], map.get(arr[i])1);}}SetMap.EntryInteger,Integer set map.entrySet();for (Map.EntryInteger,Integer entry: set){System.out.println(entry);} 2给定一组元素去重
int[] arr new int[]{23,352,46,47,84,1,44,6,1,23};SetInteger set new HashSet();for (int i 0; i arr.length; i) {set.add(arr[i]);}IteratorInteger iterator set.iterator();while (iterator.hasNext()){System.out.println(iterator.next());} 3找到一组数据中第一个重复的数据
int[] arr new int[]{23,352,46,47,84,1,44,6,1,23};SetInteger set new HashSet();for (int i 0; i arr.length; i) {if (!set.contains(arr[i])){set.add(arr[i]);}else {System.out.println(arr[i]);return;}}