二饭 发表于 2020-2-17 21:45

Java(集合②)

本帖最后由 二饭 于 2020-2-17 22:08 编辑


**​迭(dié)代器**

Java.util.Iterator接口:迭代器(对集合进行遍历)





**迭代器常用方法**

boolean hasNext():检测集合是否还有下一个元素,返回boolea值;
E next():返回迭代的下一个元素


Iterator迭代器是一个接口,我们无法直接使用,需要使用Iterator接口接口的实现类对象,获取方式比较特殊;

Collection接口中的一个方法iterator():这个方法返回的就是迭代器实现类对象;


Iterator<E> iterator():返回在此 collection 的元素上进行迭代的迭代器






**迭代器的使用步骤:**
1、使用集合中的方法iterator()获取迭代器实现类对象,使用Iterator接口接收;
2、使用Iterator接口中的方法hasNext()判断还有没有下一个元素;
3、使用Iterator接口中的方法next方法去除集合中的下一个元素;
```
Collection<String> coll=new ArrayList<>();
coll.add("a");//添加给定的元素
coll.add("b");
coll.add("c");
Iterator<String> iterator = coll.iterator();
boolean b3 = iterator.hasNext();//判断集合中是否还有下一个值
System.out.println(b3);//true
String next = iterator.next();//返回集合的下一个值
System.out.println(next);//a
```




**增强for循环:**
底层使用的就是迭代器,使用for循环的格式,简化了迭代器的书写;
是jdk1.5之后出现的新特性;

**作用:**用来遍历集合/数组;


**格式:**

```
for(集合/数组的数据类型 变量名:集合名/数组名){
}
```


**代码:**

```
for (Object a:arrayList){
    System.out.println(a);
}
```




**泛型:**
是一个未知的数据类型,当我们不确定什么数据类型的时候,就可以使用泛型;

**好处:**
1、避免了类型转换的麻烦,存储的是什么类型。取出的就是什么类型;
2、把运行期异常,提升到了编译期;

**弊端:**
泛型是什么类型,只能存储什么类型;


**1、含有泛型的类**

```
public class Person<E>{
    private E name;
    public E getName(){}
    public void setName(E name){}
}
```

**2、含有泛型的方法**

格式:

`修饰符 <泛型> 返回值类型 方法名(参数列表(使用泛型)){}`


代码:

```
public <M> void med(M s){
    System.out.println(s);
}
public static <M> void med(M s){
    System.out.println(s);
}
```


3、含有泛型的接口

接口类:

```
public interface Inter<I> {
    public abstract void med(I i);
}
```


实现类:

```
public class InterfaceImpl<I> implements Inter<I>{
    @Override
    public void med(I s){
      System.out.println(s);
    }
}
```




**泛型的通配符:**
?:代表的就是数据类型

**使用方式:**
    不能创建对象使用;
    只能作为方法的参数使用;

**泛型的上限限定:**
    ? extends E 代表的使用泛型只能是E类型的子类/本身;

**泛型的下线限定:**
    ? super E   代表的是泛型只能是E类型的父类/本身;


**代码:**

```
public static void main(String[] args) {
      Collection<Integer> list1=new ArrayList<>();
      Collection<String> list2=new ArrayList<>();
      Collection<Number> list3=new ArrayList<>();
      Collection<Object> list4=new ArrayList<>();

      getE1(list1);
      getE1(list2);//报错
      getE1(list3);
      getE1(list4);//报错

      getE2(list1);//报错
      getE2(list2);//报错
      getE2(list3);
      getE2(list4);
}
//上限限定? extends E 代表的使用泛型只能是E类型的子类/本身
public static void getE1(Collection<? extends Number> coll){}
//下限限定? super E   代表的事泛型只能是E类型的父类/本身
public static void getE2(Collection<? super Number> coll){}
```

纯手打,大家觉得有用给个回复~

二饭 发表于 2020-2-17 22:07

纯手打,大家觉得有用给个回复~

聊胜于无丶 发表于 2020-2-17 22:21

结合设计模式中的迭代器模式,和泛型对框架结构中(父子类方面)的好处分析下

二饭 发表于 2020-2-18 09:18

聊胜于无丶 发表于 2020-2-17 22:21
结合设计模式中的迭代器模式,和泛型对框架结构中(父子类方面)的好处分析下

好的,下次我整理一下

archted 发表于 2020-7-23 23:11

粗略看了一下 赞一个{:17_1089:}

剑神叶玄 发表于 2020-11-13 18:02

感谢楼主

Safety010 发表于 2020-11-20 07:48

挺不错的

hellopsm 发表于 2021-2-17 09:28

感谢大佬分享

静雅 发表于 2021-2-17 10:12

针不戳!!!
页: [1]
查看完整版本: Java(集合②)