7/100发布文章 博文管理我的博客退出 Trash Temp java高级特性-集合框架(一) java高级特性-集合框架(一) java高级特性-集合框架(一) Java面向对象三大特性之一 多态 抽象和接口 集合框架(二) 数组 循环结构 循环结构 循环结构 循环结构 循环结构 异常(exception) 添加摘要 ## Map接口概述
Map(key-value 键值对 夫妻对 )
Map接口存储一组成对的键(key)——值(value)对象,提供key到value的映射,通过key来检索。Map接口中的key不要求有序,不允许重复。value同样不要求有序,但是允许重复,
Map接口的常用API
1.void put(Object key,Object value);存储键值对
2.Object get(Object key);根据键获取值(键十唯一)
3.int size();获取集合中的键值对数量
4.boolean containsKey(Object key);是否包含指定的键
5.boolean containsValue(Object value);是否包含指定的值
6.Set <Object>keySet();
获取所有键的集合
7.collection<Object>values();
获取所有值的集合
8.Object remove(Object key);根据键删除值 会返回被删除的值
9.boolean isEmpty();判断是否是空集合
10.void clear();清空集合内容;
Map接口中存储的数据都是键——值 对,例如一个身份证对应一个人,其中身份证号码就是key,与此对应的人就是value。
使用HashMap类动态存储数组
最常用的Map 实现类是HashMap,其优点是查询指定元素效率高。
例:
使用HashMap存储学生信息,根据英文名检索学生信息
1.导入HashMap包
2.创建HashMap对象
3.调用HashMap对象的put()方法,向几何中添加数据
4.输出学员个数
5.输出键集
6.判断是否存在Jack这个键,如果存在,则根据键获取相对应的值;
7.判断是否存在Rose这个键,如果存在,则根据键获取相应的值。
//创建学生对象
Student1 = new Student("李明","男");
Student2 = new Student("刘丽","女");
//创建保存“键——值对”的集合对象
Map students = new HashMap();
//把英文名称与学员对象按照“键——值对”的方式存储在HashMap中
Students.put("Jack","student1");
Students.put("Rose","student2");
//输出学员个数
syso("已添加"+students.size()+"个学员信息");
//输出键集
syso("键集",+student.keySet());
String key ="Jack";
//判断是否存在”Jack“这个键,如果存在,则根据键获取相应的之值
if(students.containsKey(key)){
Student student = (Student)students.get(key);
syso("英文名为"+key+"的学员姓名:"+student.getName());
}
String key1 = "Rose";
//判断是否存在"Rose"如果存在,则删除此键——值对
if(students.containsKey(key1)){
students.remove(key1;);
syso("学员"+key1+"的信息已删除")
}
Map集合遍历
/**
* 思路:
* 获取键集合
* 遍历键集合
* 根据键获取对应值
* @author Charles7c
* 2019年4月18日 上午10:07:21
*/
public class Demo1 {
public static void main(String[] args) {
Map<String, String> hashMap = new HashMap<>();
hashMap.put("CN", "中国");
hashMap.put("RU", "俄国");
hashMap.put("UK", "英国");
// 获取键集合
Set<String> keySet = hashMap.keySet();
// 遍历键集合[推荐]
/*for (String key : keySet) {
// 根据键获取值
// keySet.get(key)
String value = hashMap.get(key);
System.out.println(key+" --> "+value);
}*/
// 迭代器遍历
Iterator<String> iterator = keySet.iterator(); while(iterator.hasNext()) {
String key = iterator.next();
String value = hashMap.get(key); System.out.println(key+" --> "+value);
}
}
}
了解HashMap和Hashtable的区别
相同点:
HashMap和Hashtable都是Map接口的实现,都可以实现键值对存储。
不同点:
- HashMap键值存储都可以为Null,如果键为null则只能存储一次。Hashtable键值存储都不允许为Null。
- HashMap是线程不安全的,效率高。Hashtable是线程安全的,效率低。
掌握泛型的使用
泛型的定义:
将对象的类型作为参数,指定到其他类或者方法上,从而保证类型的转换的安全性和稳定性,这就是泛型。泛型的本质就是参数化类型。
格式:
类1或接口<类型实参>对象 = new 类2<类型实参>();
例:
ArrayList<String>list = new ArrayList<Stirng>();
1.在集合中用泛型声明元素数据类型 泛型必须是引用数据类型(包装类型)
public class Demo2 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
News news1 = new News(1, "震惊!巴黎圣母院失火!", "xxx");
News news2 = new News(2, "震惊!LOL玩家和DOTA玩家竟然在众人面前互斥对方算什么男人!", "xxxx");
News news2 = new News(2, "震惊!LOL玩家和DOTA玩家竟然在众人面前互斥对方算什么男人!", "xxxx");
News news3 = new News(3, "是中国人必须转!不转不是中国人!", "xxxx");
list.add(news1);
list.add(news2);
list.add(news3);
// 没有泛型必须使用强转 不安全
for (Object object : list) {
if(object instanceof News) {
News news = (News)object;
System.out.println(news.getAuthor());
}
}
}
}
利用泛型将程序变得更加易扩展(通过泛型占位符来进行扩展)
public class Test<T> {
private String field1;
private String field2;
// 不确定是什么类型的
private T field3;
}
// 不确定是什么类型的
private T field3;
掌握Collections工具类的常用操作
Collections
void sort(集合); 对集合进行升序排序
int max(集合); 获取集合中的最大值
int min(集合); 获取集合中的最小值
int binarySearch(集合,要查找的元素); 查找指定的键
void shuffle(集合); 打乱集合元素顺序