集合框架(二)

Map接口

1.Map接口的作用

Map接口主要处理键值映射数据的存储,可以根据键实现对值的操作,最常用的实现类是HashMap。

// 先创建对象 Key-value
// 表示Key是String 类型,value是Object类型
HashMap<String,Object> hashMap = new HashMap <String, Object>();
// 存储键值对
hashMap.put("CN","天朝");
hashMap.put("US","美国");
hashMap.put("UK","英国");

System.out.println(hashMap);

// 根据键获取值
String value1 = (String) hashMap.get("CN");
String value2 = (String) hashMap.get("US");
String value3 = (String) hashMap.get("UK");
// 输出赋值后的内容
System.out.println(value1);
System.out.println(value2);
System.out.println(value3);
// 判断是否包含指定的键

System.out,println("是否包含CN"+hashMap.containsKey("CN"));

// 获取所有的键
Set<String> KeySet = hashMap.iterator();

// 迭代器遍历输出
while(iterator.hasNext()){
	String key = iterator.next();
	String value = (String) hashMap.get(key);
	System.out.println(value);
}

// 增强for循环遍历输出
for(String key : keySet){
	String value = (String) hashMap.get(key);
	System.out.println(key+" = "+value);
}

2.泛型的作用

<> 是JDK1.5的一个特性,Sun公司使用泛型改写了集合框架中的所有接口和类。但是为什么要添加泛型,我们可以看看下方的代码。

// 未指定泛型
ArrayList list = new ArrayList();
list.add(new Student("张三",’男‘));
list.add(new Student("李四",'女'));

for(Object object : list){
	Student stu = (Student) object;
	System.out.println(stu);
}

从上述的集合再调用增强for循环时,自动返回的都是Object类型,如果想向下操作通常需要向下转型,不方便。原因就是在我们返回结果的时候不知道集合里面存储的是什么类型的数据,所以为了方便我们可以通过泛型,在创建集合的时候接指定集合里面存储的元素的数据类型。
泛型的作用:保证类型转换的安全性和稳定性。
在这里插入图片描述
当我们指定了泛型(集合存储数据的数据类型)之后,获取到的结果就无需进行类型转换了,从刚才可以看到,其实集合还可以像下面这样写
在这里插入图片描述
另外在我们集合中泛型要使用包装类型(引用数据类型),例如:集合存储int型,在制定泛型用integer,char ->Character,doublle型 -> Double 等。

3.Coolections

Collections和Collection不同,前者世界和的操作类,后者是集合接口,Java集合框架将针对不同数据结构算法·的实现都保存在工具类中,Collections类定义了一系列用于集合的静态方法。
在这里插入图片描述

3.1Collection 和 Collections有什么区别?

java.util.Collection 是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法,在Java类库中有很多具体的实现,意义是为各种具体的集合提供最大化的统一操作方式。比如Collection 的实现类 List、Set等,List的实现类有LinkedList、ArrayList、Vector等,Vector的实现类有Stack等,不过切记Map是自立门户的,其提供了转换为Collection的方法,但自己不是Collection的子类。

java.util.Collections是一个包装类,它包含有各种有关集合操作的静态多态方法,此类构造private不能实例化,就像一个工具类,服务于Java的Collection框架,其提供的方法大概可以分为对容器接口对象进行操作类(查找和替换、排序和升序、添加和修改)和返回一个内容接口对象类(适配器将其他类型的数据转换为容器接口对象、装饰器修饰一个给定容器接口对象增加某种性质。

4.可变参数

在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类型一致,这时我们可以采用可变参数,它本质上就是数组,只不过再给可变参数传递参数的时候,不需要再创建数组来传递了,而是直接将数组里的元素作为实际参数进行传递,其实编译成的class字节码文件,将这些元素封装到了一个数组中,然后才进行传递使用的,不过都是系统帮你做的。

使用方式如下

修饰符 返回值类型 方法名(参数类型... 形参名){

}

又因其本身就是一个数组

修饰符 返回值类型 方法名(参数类型[] 形参名){

}

只不过数组作为形参的话,传递参数只能传递一个数组,而可变参数则可以传递多个数据。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值