文章目录
- 1.搜索
- 1.1概念
- 1.2模型
- 2.Map的使用
- 3.Set的使用
1.搜索
1.1概念
Map和Set是一种专门用来进行搜索的容器或者是数据结构,其搜索的效率与其具体的实例化子类有关。Map和Set是一种适合动态查找的集合容器。
1.2模型
一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),将其称之为Key-Value的键值对,所以模型会有两种:
1.纯Key模型,比如:
快速查找某个名字在不在通讯录中;
2.Key-Value模型,比如:
学校的管理系统,每个人的学号都对应着自己的一个名字。学校就相当于Key,姓名,性别,身高,体重,年龄,年级…就相当于于value.
Map中存储的就是Key-Value这样的键值对,Set中只存储了Key。 Key-value键值对根据Key来找Value。
2.Map的使用
TreeSet 和HashSet用法相同,底层实现不同
TreeMap和HashMap用法相同,底层实现不同。
如果是根据Key找Value的内容,就使用Map。
import java.util.HashMap;
import java.util.Map;
public static TestMap(){
public static void main(Strings [] args){
Map<String,String> map=new HashMap<>();
//1.使用put方法插入键值对
//Map内部的元素之间的先后顺序和插入顺序关系不大
//当put的时候,发现Key已经存在,此时就会覆盖原有的Value
map.put("及时雨","宋江");
map.put("黑旋风"."李逵");
map.put("行者","武松");
map.put("及时雨","宋公明");
System.out.println(map);
//2.使用get方法,根据Key获取Value
//如果要是Key不存在,get返回null
String value=map.get("行者");
System.out.println(value);
//3。还可以使用getOrDefault来根据key获取value
//如果Key不存在,getOrDefault返回一个默认值
String value2=map.getOrDefault("小李广","花荣");
System.out.println(value2);
//4.使用isEmpty判定空
System.out.println(map.isEmpty());
//5.使用size方法来获取到键值对的个数
System.out.println(map.size());
//6.使用clear来清空所有的键值对
map.clear();
System.out.println(map.isEmpty());
System.out.pringln(map.size());
//6.遍历map(Map设计出来不是为了遍历)
//遍历Map是比较复杂的,需要先把Map转换为Set
for(Map.Entry<String,String> entry:map.entrySet()){
//map.entrySet()把Map这样的键值对结构进行了转换
//转换成了一个Set,Set里面的每一个元素都是Entry
//每个Entry里面包含了Key和Value
System.out.println(entry.getKey()+":"+entry.getValue());
}
//8.还可以单独获取到所有的Key和所有的Value
for(String key:map.getKey()){
System.out.println(key);
}
for(String value:map.vales()){
System.out.println(value);
}
}
}
3.Set的使用
如果只是判定Key是否存在,则需要使用Set.
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class TestSet {
public static void main(String[] args) {
Set<String> set=new HashSet<>();
//因为Set继承自collection,所以collection的add,contains,remove方法都适用
//1.适用add插入元素
//如果出现重复的Key,只保存一份
//借助set这样的特性,可以去重
set.add("C++");
set.add("python");
set.add("c");
set.add("java");
set.add("java");
System.out.println(set);
//2.使用contains方法判断元素是否存在
boolean ret=set.contains("java");
System.out.println(ret);
//3.使用remove方法进行删除元素
set.remove("java");
System.out.println(set);
//Set中的元素不能改,如果非要改,则需要删除在插入
//4.使用isEmpty来判空
System.out.println(set.isEmpty());
//5.使用size来确定元素个数
System.out.println(set.size());
//6.使用clear清空元素
set.clear();
System.out.println(set.isEmpty());
System.out.println(set.size());
//7.遍历
//1)直接使用for-each进行遍历
//啥样的类能使用for-each,如果能支持迭代器
//迭代:实现了Iterator接口
for(String key:set){
System.out.println(key);
}
//2)使用迭代器进行迭代
//迭代器存在的意义就是遍历集合类
Iterator<String> it=set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}