转载

JavaSE基础-集合

a.定义的是所有 单列集合 中共性的方法

b.所有的单列集合都可以使用共性的方法

c.没有带索引的方法(因为 Set 集合没有索引)

1) .学习方法

a. 学习顶层 :学习顶层接口/抽象类中共性的方法

b. 使用底层 :顶层无法实例化,通过使用底层熟悉规则

2) .常用方法

1. public boolean add(E e)
2. public void clear()
3. public boolean remove(E e)
4. public boolean contains(E e)
5. public boolean isEmpty()
6. public int size()
7. public object[] toArray

1. List接口

0. 概述

a. 有序 (存储和取出元素顺序相同) b. 允许存储 重复的元素

c. 有索引 ,可以使用普通的 for 循环遍历

2. Set接口

0.概述

a. 不允许 存储重复元素

b. 无索引 (不能使用普通的 for 循环遍历)

二、迭代器

1. Iterator接口概述

Iterator 迭代器,即 Collection 集合元素的通用获取方式

在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续再判断,如果还有就再取出来,一直把集合中的所有元素全部取出。这种取出方式专业术语称为 迭代

2. 常用方法

boolean hasNext()
E next()

3. 注意事项

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

Collection 接口有一个方法,为 iterator() ,这个方法返回的就是迭代器实现类的对象 Iterator<E> (其中的泛型E根据集合中的数据类型而定), iterator() 返回在此 Collection 的元素上进行迭代的 迭代器

4. 使用步骤(重点)

/*
1. 使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
2. 使用Iterator接口中的方法hasNext()判断还有没有下一个元素(最开始,指针指向-1位置)
3. 使用Iterator接口中的方法next()取出集合中的下一个元素(同时会将指针向后移动一位) 
*/
复制代码

5.增强for循环( foreach() 语句)

0. 底层

增强for循环:底层使用的也是 迭代器 ,使用 for 循环的格式,简化了迭代器的书写

1. 特性

Collection<E> extends Iterator<E> 所有的单列集合都可以使用增强 for 循环 public interface Iterator<T> 实现这个接口允许对象成为 foreach 语句的目标( T->Type , E->Element )

2. 作用

用来遍历 集合数组

3. 格式:

for(集合/数组的数据类型 变量名:集合名/数组名){
    sout(变量名);  
}
复制代码

三、泛型

1. ArrayList特点

可以存储多种类型数据

//可以实现,但风险更大,因此多使用泛型
ArrayList list = new ArrayList();
list.add("abc");
list.add(11);
复制代码

2. 泛型使用

1).定义含有泛型的类

泛型定义在类名后,用 <> 标识

创建对象的时候确定泛型的数据类型,如果创建时不标明,则默认为是Object类型

public class GenericClass<E>{
    private E name;
    ...
}
复制代码

2).定义含有泛型的方法

泛型定义在方法的修饰符和返回值类型之间

调用方法时确定泛型类型即可

public <M> void method(M m){
    System.out.println(m);
}
复制代码

3). 实现含有泛型的接口

泛型定义在接口之后,用 <> 标识

a. 可以在实现类中确定类型 b. 也可以在创建实现类对象时确定类型(参考ArrayList<>)

a .在实现类中确定类型

public class GenericInterfaceImpl implements GenericInterface<String>{
    @Override
    public void method(String s){
        System.out.prinln(s);
    }
}
复制代码

b. 在创建实现类对象时确定类型

public class GenericInterfaceImpl<I> implements GenericInterface<I>{
    @Override
    public void method(I i){
        System.out.println(i);
    }
}

复制代码

3. 泛型通配符

? : 代表任意的数据类型

1). 使用方式

不能创建对象使用,只能作为方法的参数使用,定义存储时都不能使用

public class DemoGeneric{
    public static void main String(String[] args){
        ArrayList<Integer> list1 = new Arraylist<>();
        list1.add(1);
        list1.add(2);
        
        Arraylist<String> list2 = new Arraylist<>();
        list2.add("a");
        list2.add("b");
    }
    /*
    定义一个方法,可以遍历所有类型的ArrayList集合
    
    不能用Object类似多态一样,因为泛型没有继承概念
    */
    public static void printArray(ArrayList<?> list){
        Iterator<?> it = list.iterator();
        while(it.hasNext()){
        Object o = it.next();(多态)
        System.out.println(o);//直接打印o.toString()输出了子类o的内容
    }
        
    
}
复制代码

2). 高级使用

泛型的上限限定: ? extends E:

代表使用的泛型只能是E类型的子类/本身

泛型的下限限定:? super E :

代表使用的泛型只能是E类型的父类/本身

原文  https://juejin.im/post/5efc7141f265da22d1307570
正文到此结束
Loading...