一文详解Java中Map和Set接口的使用方法
目录
- Map与Set的基本概念与场景
- 模型概念
- Map接口的性质
- Map接口的使用方法
- Set接口的性质
- Set接口的使用方法
Map与Set的基本概念与场景
Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。以前常见的搜索方式有:
1. 直接遍历,时间复杂度为O(N),元素如果比较多效率会非常慢。
2. 二分查找,时间复杂度为O(log2^n),但搜索前必须要求序列是有序的。上述排序比较适合静态类型的查找,即一般不会对区间进行插入和删除操作了,而现实中的查找比如:
1. 根据姓名查询考试成绩
2. 通讯录,即根据姓名查询联系方式3. 不重复集合,即需要先搜索关键字是否已经在集合中可能在查找编程客栈时进行一些插入和删除的操作,即动态查找,那上述两种方式就不太适合了,本节介绍的Map和Set是一种适合动态查找的集合容器。
模型概念
一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),将其称之为Key-value的键值对,所以模型会有两种:
- 纯 key 模型,例如:
- 有一个英文词典,快速查找一个单词是否在词典中
- 快速查找某个名字在不在通讯录中
- Key-Value 模型,例如:
- 统计文件中每个单词出现的次数,统计结果是每个单词都有与其对应的次数:<单词,单词出现的次数
Map接口的性质
在Java中,Map
接口是一个用于存储键值对(key-value pairs)的对象,它属于Java Collections Framework的一部分。Map
接口的主要特点包括:
键值对存储:
Map
存储的数据是以键值对的形式组织的,每个键(key)唯一对应一个值(value)。可以通过键来快速获取对应的值。无序性:大多数实现类(如
HashMap
)不会保证元素的顺序,除非使用特定的实现(如LinkedHashMap
,它可以保持插入顺序,或者TreeMap
,它会按照键的自然顺序或指定的比较器进行排序)。键的唯一性:在同一个
Map
中,不能有重复的键。如果试图将一个新的值与已有的键关联,原有的值将被新值替换。实现类:Java提供了多种
Map
接口的实现,例如:HashMap
:基于哈希表的实现,允许null值和null键,查找速度快。TreeMap
:基于红黑树的实现,支持排序的键,查找速度相对较慢。LinkedHashMap
:结合了HashMap
的哈希表和链表特性,维护插入顺序。
常用方法:
Map
接口提供了一系列的方法,例如:put(K key, V value)
:将指定的值与指定的键关联。get(Object key)
:返回指定键所映射的值。remove(Object key)
:移除指定键的键值对。containsKey(Object key)
:检查是否存在指定的键。keySet()
:返回Map中所有键的集合。values()
:返回Map中所有值的集合。
总之,Map
接口是Java中重要的数据结构之一,方便有效地进行数据的存储和检索,广泛应用于各种场景中。
Map接口的使用方法
put(K key, V value)
:将指定的值与指定的键关联。
public class Main { public static void main(String[] args) { Map<String,Integer> map = new TreeMap<>(); map.put("one",1); map.put("two",2); map.put("three",3); map.put("four",4); } }
get(Object key)
:返回指定键所映射的值。
public class Main { public static void main(String[] args) { Map<String,Integer> map = new TreeMap<>(); map.put("one",1); map.put("two",2); map.put("three",3); map.put("four",4); System.out.println(map.get("two")); } }
V getOrDefault(Object key, V defaultValue) :返回 key 对应的 value,key 不存在,返回默认值
public class Main { public static void main(String[] args) { Map<String,Integer> map = new TreeMap<>(); map.put("one",1); map.put("two",2); map.put("three",3); map.put("four",4); System.out.println(map.getOrDefault("five",-1)); } }
Set<K> keySet() :返回所有 key 的不重复集合,用 Set 容器接收
public class Main { public static void main(String[] args) { Map<String,Integer> map = new TreeMap<>(); map.put("one",1); map.put("two",2); map.put("three",3); map.put("four",4); Set<String> strings = map.keySet(); } }
Collection<V> values() :返回所有 value 的可重复集合 ,用 Collection 容器接
public class Main { public static void main(String[] args) { Map<String,Integer> map = new TreeMap<>(); map.put("one",1); map.put("two",2); map.put("three"ZRJXoEqF,3); map.put("four",4); Collection<Integer> values = map.values(); System.out.println("=="); } }
Set<Map.Entry<K, V>> entrySet() :返回所有的 key-value 映射关系
public class Main { public static void main(String[] args) { Map<String,Integer> map = new TreeMap<>(); map.put("one",1); map.put("two",2); map.put("three",3); map.put("four",4); Set<Map.Entry<String, Integer>> entries = map.entrySet(); for (Map.Entry<String, Integer> entry : entries) { System.out.println("Key = "+entry.getKey()+" Val = "+entry.getValue()); } } }
注意:
- 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删除掉,然后再来进行重新插入。
Set接口的性质
在Java中,Set
接口是一个用于存储唯一元素的集合,它也是Java Collections Framework的一部分。Set
接口的主要特点包括:
唯一性:
Set
中不允许重复的元素,这意味着集合中的每个元素都是唯一的。如果试图添加重复元素,操作将被拒绝,集合的状态不会改变。无序性:
Set
通常不保证元素的顺序。尤其是使用HashSet
时,元素的存储顺序是随机的。而LinkedHashSet
可以维护元素的插入顺序,TreeSet
则会按自然顺序或自定义的比编程客栈较器进行排序。实现类:Java提供了多种
Set
接口的实现,包括:HashSet
:基于哈希表的实现,允许null元素,查找速度快,但不保证元素的顺序。LinkedHashSet
:结合了哈希表和链表的特性,保持元素的插入顺序。TreeSet
:基于红黑树的实现,按升序排序元素,不允许null值。
常用方法:
Set
接口提供了一系列的方法,例如:add(E e)
:向集合中添加元素,如果元素已存在,则返回false。remove(Object o)
:移除指定元素。contains(Object o)
:检查集合中是否包含指定元素。size()
:返回集合中元素的数量。clear()
:移除集合中的所有元素。iterator()
:返回一个迭代器,用于遍历集合中的元素。
应用场景:
Set
常用于需要存储不重复元素的场景,比如去重、集合运算(如交集、并集和差集)等。
总之,Set
接口是Java中重要的数据结构,适合用于处理唯一性要求的数据集合,具有高效的存储和检索特性。
Set接口的使用方js法
set 接口中的方法和 Map 接口中的常见方法大差不差,就不一 一介绍了。
import java.util.TreeSet; import java.util.Iterator; import java.util.Set; public static void TestSet(){ Set<String> s = new TreeSet<>(); // add(key): 如果key不存在,则插入,返回ture // 如果key存在,返回falsehttp://www.devze.com boolean isIn = s.add("apple"); s.add("orange"); s.add("peach"); s.add("banana"); System.out.println(s.size()); System.out.println(s); isIn = s.add("apple"); // add(key): key如果是空,抛出空指针异常 //s.add(null); // contains(key): 如果key存在,返回true,否则返回false System.out.println(s.contains("apple")); System.out.println(s.contains("watermelen")); // remove(key): key存在,删除成功返回true // key不存在,删除失败返回false // key为空,抛出空指针异常 s.remove("apple"); System.out.println(s); s.remove("watermelen"); System.out.println(s); Iterator<String> it = s.iterator(); while(it.hasNext()){ System.out.print(it.next() + " "); } System.out.println(); }
以上就是一文详解Java中Map和Set接口的使用方法的详细内容,更多关于Java Map和Set使用方法的资料请关注编程客栈(www.devze.com)其它相关文章!
精彩评论