存储一个对象到集合后,集合会“忘记”这个对象的类型,当该对象从集合中取出时,这个对象的编 译类型就变成了 Object类型。那么在取出元素时,如果进行强制类型转换就很容易抛出异常。下面通过案例演示这种情况,如文件4-4所示。
package com.itheima.Example09; import java.util.*; public class example09 { public static void main(String[] args) { ArrayList list=new ArrayList(); list.add("zhangsan"); list.add("lisi"); list.add(18); //添加Integer类型 for(Object obj: list){ String str=(String) obj; //强制转换成String类型 } }
结果如下:
在取出这些元素时,都将它们强制转换为 String类型,由于Integer对象不能转换为 String 类型,因此在程序运行时抛出了类转换异常。
为了解决这个问题,Java引入了“参数化类型(parameterizedtype)”这个概念,即泛型,它可以限定方法 *** 作的数据类型,在定义集合类 时,使用“<参数化类型>”的方式指定该类中方法 *** 作的数据类型。
ArrayList<参数化类型>list=new ArrayList<参数化类型>();
将 ArrayList list=new ArrayList();替换成 ArrayListlist=new ArrayList ();
将得到以下结果:
4.3set接口: 4.3.1 set接口简介Set接口继承自 Collection接口,与 Collection接口中的方法基本一致,没有对Collection接口进行功能上的扩充,但比 Collection接口更加严格。与 List接口不同的是,Set接口中的元素无序,并且都会以某种规则保证存入的元素不会出现重复。 Set接口主要有两个实现类,分别是 HashSet和 TreeSet。
4.3.2Hashset集合:HashSet按 Hash算法存储集合中的元素,(根据对象的哈希值确定元素在集合中的存储位置)因此具有很好的存取和查找性能,并且存储的元素是无序的和不可重复的。
package com.itheima.example11; import java.util.*; public class example11 { public static void main(String[] args) { HashSet hashSet =new HashSet(); //创建HashSet集合 hashSet.add("zhangsan"); hashSet.add("lisi"); hashSet.add("wangwu"); hashSet.add("lisi"); //添加重复元素 Iterator it=hashSet.iterator(); //得到Iterator对象 while(it.hasNext()){ //通过 while 循环,判断集合中是否有元素 Object obj=it.next(); //如果有元素,则使用迭代器的 next()方法获取元素 System.out.println(obj); } } }
结果如下:
**注意:**HashSet集合不出现重复的元素的原因,是因为在向Set中添加对象时,会先调用此对象所在类的hashCode()方法,计算此对象的哈希值,此哈希值决定了此对象在 Set 中的存储位置。若此位置之前没有对象存储,则将这个对象直接存储到此位置。若此位置 已有对象存储,再通过equals()比较这两个对象是否相同,如果相同,则后一个对象就不能 再添加进来
4.4map接口: 4.4.1map接口简介:Map集合是一种双列集合,集合中的每个元素都包含一个键对象Key和一个值对象Value,键和值是一一对应的关系,称为映射。也就是说,根据键就能找到对应的值,类似于生活中一张身份z对应一个人一样。
HashMap集合是基于哈希表的 Map接口的实现,它用于存储键值映射关系,但不保证映射的顺序
package com.itheima.example11; import java.util.*; public class example11 { public static void main(String[] args) { HashMap hashMap =new HashMap(); //创建 HashMap 集合 hashMap.put("001","zhangsan"); //存储键和值 hashMap.put("002","lisi"); hashMap.put("003","wangwu"); Set keySet=hashMap.keySet(); //获取键的集合 Iterator it= keySet.iterator(); //迭代键的集合 while(it.hasNext()){ Object key=it.next(); Object value=hashMap.get(key); //获取每个键所对应的值 System.out.println(key+"="+value); } } }
运行结果:
首先调用 HashMap集合的 KeySet()方法,获得存储 Map中所有键的 Set集合,然后通过Iterator迭代 Set集合的每一个元素,即每一个键,最后通过调用 get (Stringkey)方法,根据键获取对应的值
package com.itheima.example11; import java.util.*; public class example11 { public static void main(String[] args) { HashMap hashMap =new HashMap(); hashMap.put("001","zhangsan"); hashMap.put("002","lisi"); hashMap.put("003","wangwu"); Set entrySet=hashMap.entrySet(); Iterator it= entrySet.iterator(); while(it.hasNext()){ Map.Entry entry=(Map.Entry)it.next(); //获取集合中键值对映射关系 Object key=entry.getKey(); //获取 Entry 中的键 Object value=entry.getValue(); //获取 Entry 中的值 System.out.println(key+"="+value); } } }4.4.3 Properties 集合:
Properties主要用于存储字符串类型的键和值,由于 Properties类实现了 Map接口,因此,Properties类本质上是一种简单的 Map集合。在实际开发中,经常使用 Properties集合存取应用的配置项。
代码如下:
针对字符串的存取提供了两个专用的方法:setProperty() 和getProperty()。其中,setProperty()方法用于将配置项的键和值添加到 Properties集合 中,getProperty()方法用于根据键获取对应的值。在第10行代码中通过调用 Properties的 stringPropertyNames()方法得到一个所有键的 Set集合,然后在遍历所有的键 时,通过调用getProperty()方法获得键所对应的值。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)