第十三章Collecction、泛型

一、Collection集合

1.1集合与数组的区别:

1.数组长度是固定的,集合的长度是可变的。

2.数组中存储的是同一种类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。

1.2Collection集合的常用功能

Collection是所有单列集合的父接口,双列集合在第十五章讲解MAP集合时会讲到。

  1. public boolean add(E e):把给定的对象添加到当前集合中 。
  2. public boolean contains(E e):判断当前集合中是否包含给定的对象。
  3. public boolean remove(E e):把给定的对象在当前集合中删除。
  4. public int size():返回集合中元素的个数。
  5. public Object[] toArray():把集合中的元素,存储到数组中。
  6. public void clear():清空集合中所有的元素。
  7. public boolean isEmpty():判断当前集合是否为空

二、Iterator迭代器

2.1使用迭代器对集合进行取元素

Iterator也是接口,主要用于迭代访问(遍历)Collection中的元素,所以Iterator对象也被称为迭代器

public boolean hasNext():如果仍有元素可以迭代

public E next():返回迭代的下一个元素

public void remove():删除元素

步骤:

1.创建迭代器:集合名.iterator

2.判断是否有下一个元素:为了第四步的重复步骤,选择while语句,条件即为迭代对象.hashNext()

3.获取元素:迭代对象.next().var

4.重复执行2和3步骤,知道2中判断没有下一个元素

Iterator it = coll.iterator();

    Iterator<String> it = coll.iterator();//第一步
    while(it.hasNext()){ //第二步
        String s = it.next();//第三步
        System.out.println(s);//输出打印(遍历)
    }

2.2增强for循环

增强for循环也叫foreach循环,专门用来遍历数组和集合的

for(元素数据类型 变量 : Collection集合或数组){}

例:for (int : arr){}

快捷键:集合/数组名.for

注意事项:

与foreach比,Iterator迭代器只能遍历集合。两者都可快速遍历,但是缺点为无法获知索引位置。且两者遍历过程中不可对集合中的元素进行增删操作

三、泛型

泛型可将数据类型应用于不同的类、方法、接口当中,将数据类型作为参数进行传递。

3.1泛型用于类

格式: 修饰符 class 类名 <代表泛型的变量>{ }

例: class ArrayList{ }

泛型类可以在创建对象的时候确定具体数据类型(new的对象类型可直接写出具体类型,即默认将泛型类的 E 理解为次类型)

MyGenericClass my = new MyGenericClass(); //E—String类型

3.2泛型用于方法

格式: 修饰符<代表泛型的变量> 返回值类型 方法名(参数){ }

例: public static void show(E e){ }

调用方法时,确定泛型的类型,调用时直接写入对应类型的值,即可表示对应类型

m.show(“aaa”); // E —String

3.3泛型用于接口

格式: 修饰符 interface 接口名<代表泛型的变量> { }

例: public interface MyGenericInterface{ }

定义实现类时确定泛型的类型

public class MyImp implements MyGenericInterface{ } //E—String

始终不确定泛型的类型,直到创建对象时,确定泛型的类型

public class MyImp2 implements MyGenericInterface { } //不确定时仍未E,但格式有变化

当走到创建对象时,即为泛型用于类时的过程

3.4泛型通配符:泛型上下限(受限泛型、泛型高级使用)

当使用泛型时,在传递数据中,若泛型类型不确定,可以通过通配符:<?>表示。?就是泛型通配符,用来指定任意的数据类型。

但当需要特定区间范围的类型时可用受限泛型

上限泛型:

格式: 类型名称 <? extends 类 > 对象名称 //只能接收该类型及其子类

例: public static void getElement1(Collection<? extends Number> coll){ }

已知Object类,String 类,Number类,Integer类,其中Number是Integer的父类

此时的泛型?,必须是Number类型或者Number类型的子类

下限泛型:

格式: 类型名称 <? super 类 > 对象名称 //只能接收该类型及其父类型

例: public static void getElement2(Collection<? super Number> coll){ }

已知Object类,String 类,Number类,Integer类,其中Number是Integer的父类

泛型的下限:此时的泛型?,必须是Number类型或者Number类型的父类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值