有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类型
        }
    }

结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F58ap6V2-1636035419720)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20211104201854330.png)]
在取出这些元素时,都将它们强制转换为 String类型,由于Integer对象不能转换为 String 类型,因此在程序运行时抛出了类转换异常。

为了解决这个问题,Java引入了“参数化类型(parameterizedtype)”这个概念,即泛型,它可以限定方法操作的数据类型,在定义集合类 时,使用“<参数化类型>”的方式指定该类中方法操作的数据类型。

ArrayList<参数化类型>list=new ArrayList<参数化类型>();
将  ArrayList list=new ArrayList();替换成  ArrayList<String> list=new ArrayList<String>();

将得到以下结果:在这里插入图片描述

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,键和值是一一对应的关系,称为映射。也就是说,根据键就能找到对应的值,类似于生活中一张身份证对应一个人一样。

方 法 声 明功 能 描 述
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)方法,根据键获取对应的值*/

运行结果:在这里插入图片描述

首先调用 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);
        }
    }
}
/*首先调用 Map对象的entrySet()方法获得存储在 Map中所有映射的 Set集合,这个集合中存放了 Map.Entry类型的元素(Entry是 Map内部接口),每个 Map. Entry对象代表 Map中的一个键值对,然后迭代 Set集合,获得每一个映射对象,并分别调 用映射对象的getKey()和getValue()方法获取键和值。*/
4.4.3 Properties 集合:

Properties主要用于存储字符串类型的键和值,由于 Properties类实现了 Map接口,因此,Properties类本质上是一种简单的 Map集合。在实际开发中,经常使用 Properties集合存取应用的配置项。

代码如下:

在这里插入图片描述

针对字符串的存取提供了两个专用的方法:setProperty() 和getProperty()。其中,setProperty()方法用于将配置项的键和值添加到 Properties集合 中,getProperty()方法用于根据键获取对应的值。在第10行代码中通过调用 Properties的 stringPropertyNames()方法得到一个所有键的 Set集合,然后在遍历所有的键 时,通过调用getProperty()方法获得键所对应的值。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值