Map
Map集合的概述和使用
双列集合一次可以存两个元素 左边称为键,唯一的,右边称为值,可以重复的。对应的关系,称之为键值对
Interface Map<K,V> K:键的数据类型 V:值得数据类型
键不能重复,值可以重复
键和值是一一对应得,每一个键只能找到自己对应得值
(键+值)这个我们称之为"键值对"或者"键值对对象",在Java中叫做"Entry对象"
例如 学号和学生 一个学号对应一个学生
多态得方式创建
Map得基本使用
public class mapTest {
/*
Map得基本使用
*/
public static void main(String[] args) {
Map<String, String> m=new HashMap<>();
//添加方法 put
m.put("zhangsan","123");
m.put("lisi","456");
m.put("wangwu","789");
System.out.println(m);
}
Map得常用方法
V put(K key,V value) 添加元素
V remove(Object key) 根据键删除键值对元素
void clear() 移除所有键值对元素
boolean containsKey(Object key)判断集合是否包含指定得键
boolean containsValue(Object value)判断集合是否包含指定得值
boolean isEmpty()判断集合是否为空
int size 集合得长度,也就是集合中键值对得个数
public class mapTest {
/*
Map得基本使用
*/
public static void main(String[] args) {
Map<String, String> m=new HashMap<>();
//添加方法 put
//如果要添加得键不存在,那么就会把键值对都添加到集合中
//如果要添加得键不存在得,那么会覆盖原来得值,把原来得值作为返回值进行返回
m.put("zhangsan","123");
m.put("lisi","456");
m.put("wangwu","789");
System.out.println(m);
String zhangsan = m.put("zhangsan", "26");
System.out.println(zhangsan);
System.out.println(m);
//删除
String zhangsan1 = m.remove("zhangsan");
System.out.println(zhangsan1);
System.out.println(m);
//清空
m.clear();
System.out.println(m);
//containskey 判断集合是否包含指定得键
boolean zhangsan2 = m.containsKey("zhangsan");
System.out.println(zhangsan2);//true
//containsvalue 判断集合是否包含指定得值
boolean b = m.containsValue("123");//true
boolean b1 = m.containsValue("999");//false
//判断集合是否为空
boolean empty = m.isEmpty();
System.out.println(empty);//返回的值为布尔值
//size 返回得是键值对得个数
int size = m.size();
System.out.println(size);
}
}
Map得第一种遍历集合方式
Set<K> keySet() 获取所有键得集合
V get(Object key) 根据键获取值
代码:
public class mapTest {
public static void main(String[] args) {
//获取并添加元素
Map<String, String> m=new HashMap<>();
m.put("a","1");
m.put("b","2");
m.put("c","3");
//获取到所有得键
Set<String> key = m.keySet();
//i遍历set集合得每一个键
for (String string : key) {
//遍历每一个key,来获取到每一个值
String value = m.get(string);
System.out.println(string+" "+value);
}
}
}
第二种遍历方式
Set<Map.Entry<K,V>>entrySet() 获取键值对对象得集合
K getkey() 获取键
V getValue() 获取值
代码:
public class mapTest {
public static void main(String[] args) {
//获取并添加元素
Map<String, String> m=new HashMap<>();
m.put("a","1");
m.put("b","2");
m.put("c","3");
//获取到所有得键
// Set<String> key = m.keySet();
// //i遍历set集合得每一个键
// for (String string : key) {
// //遍历每一个key,来获取到每一个值
// String value = m.get(string);
// System.out.println(string+" "+value);
// }
// 获取到所有得键值对对象
//Set集合种装的是键值对对像(Entry对象)
//而Entry里面装的是键值对
Set<Map.Entry<String, String>> entries = m.entrySet();
for (Map.Entry<String, String> entry : entries) {
//得到每一个键值对对象
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+" "+value);
}
}
第三种遍历方式
public class mapTest {
public static void main(String[] args) {
//获取并添加元素
Map<String, String> m=new HashMap<>();
m.put("a","1");
m.put("b","2");
m.put("c","3");
//获取到所有得键
// Set<String> key = m.keySet();
// //i遍历set集合得每一个键
// for (String string : key) {
// //遍历每一个key,来获取到每一个值
// String value = m.get(string);
// System.out.println(string+" "+value);
// }
// 获取到所有得键值对对象
//Set集合种装的是键值对对像(Entry对象)
//而Entry里面装的是键值对
// Set<Map.Entry<String, String>> entries = m.entrySet();
// for (Map.Entry<String, String> entry : entries) {
// //得到每一个键值对对象
// String key = entry.getKey();
// String value = entry.getValue();
// System.out.println(key+" "+value);
// }
m.forEach((String key,String value)->
{
System.out.println(key+" "+ value);
});
}
}
HashMap得特点:
HashMap是Map里边得一个实现类
没有额外需要了解得方法,直接用Map得方法就好
HashMap跟HashSet底层一样是哈希表结构
依赖hashCode方法和equals方法保证键唯一
如果键要存储自定义对象,需要重写hashCode和equals方法
TreeMap得特点
TreeMap是Map里边得一个实现类
没有额外需要了解得方法,直接用Map得方法就好
TreeMap跟TreeSet一样底层是红黑树结构得
依赖自然排序或者比较器排序,对键进行排序
如果键是自定义对象,需要实现Comparable接口或者创建TreeMap对象时候给出比较器排序规则
可变参数
就是形参得个数是可变的
格式:
修饰符 返回值类型 方法名(数据类型...变量名){}
范例:public static int sum(int...a){}
这里得变量也就是一个数组
public class test6 {
public static void main(String[] args) {
int getsum = getsum(1,2,3,4,5);
System.out.println(getsum);
}
private static int getsum(int...arr) {
int sum=0;
for (int i = 0; i < arr.length; i++) {
sum=sum+arr[i];
}
return sum;
}
}
注意:如果一个方法包含多个参数,可变参数要放到最后