有CC++基础的Java学习

有CC++基础的Java学习,第1张

有C/C++基础的Java学习 java学习的第六天: 4.2.5 泛型:

存储一个对象集合后,集合会“忘记”这个对象的类型,当该对象从集合中取出时,这个对象的编 译类型就变成了 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();替换成  ArrayList list=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对应一个人一样。

方 法 声 明功 能 描 述Object remove(int index)删除index索引处的元素void add(int index,Object element)将元素element插入到 List集合的index处boolean addAll(int index,Collection c)将集合c所包含的所有元素插入到 List集合的index处Object get(int index)返回集合索引index处的元素Object set(int index,Object element)将索引index处元素替换成element对象,并将替换后的元素返回int indexOf(Object o)返回对象o在 List集合中出现的位置索引int lastIndexOf(Object o)返回对象o在 List集合中最后一次出现的位置索引List subList(int fromIndex,int toIndex)返回从索引fromIndex(包括)到toIndex(不包括)处所有元素集合组成的子集合 4.4.2 HashMap集合:

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()方法获得键所对应的值。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5097597.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存