面向对象集合

简介: 面向对象集合

需要:会使用集合存储设局

会遍历集合,把数据取出来

掌握每种集合的特性


List接口(1.有序的集合【存储和取出元素顺序相同】 2.允许存储重复元素 3.有索引可以使用普通的for循环遍历)

set接口 (1.不允许存储重复元素 2.每索引不能使用普通for循环遍历)

Collection接口(定义的所有单列集合中共性的方法 所有单列集合都可以使用共性方法 没有带索引的方法)

集合框架的学习方法:

学习顶层:学习顶层接口/抽象类中的共性方法,所有子类都可以使用

使用底层:底层不是接口就是抽象类,无法创建对象使用,需要用底层子类创建对象使用


Collection集合常用功能(所有单列集合最顶层的接口)

共性方法有七个

public boolean add(E a) 给定的对象添加到当前集合中

Collection<String> coll = new ArrayList<>();
System.out.println(coll);       //空的
boolean b1 = coll.add("张三");   //可以去掉 boolean b1直接coll.add()
System.out.println(coll);      //张三


public boolean remove(E a) 把给定的对象在当前集合中删除

coll.remove("张三");      //本来是[张三, 李四, 王五, 赵六, 田七]
System.out.println(coll);    //用了remove之后变成了[李四, 王五, 赵六, 田七]


public boolean contains(E a) 判断当前集合中是否包含给定的对象

boolean b2 = coll.contains("李四");
System.out.println(b2);   //true


public boolean isEmpty() 判断当前集合是否为空

boolean b3 = coll.isEmpty();
System.out.println(b3);


public int size() 返回元素中集合个数

int i = coll.size();
System.out.println(i);    //4


public object[] toArray() 把集合中的元素保存到数组

Object[] arr = coll.toArray();         //变成数组
for (int j = 0; j < arr.length; j++) { //遍历数组
    System.out.println(arr[j]);        //打印数组


public void clear() 清空集合中所有元素

coll.clear();
System.out.println(coll);  //集合还在就是内容清空了


Iterator接口 迭代器(对集合进行遍历)

迭代:即Collection集合元素的通用获取方式,再取元素之前先判断集合中有没有元素,如果有就把这个元素取出来,再继续判断,直到全部取出,这种取出方法专业术语叫迭代

是一个接口无法直接使用,需要使用实现类对象

迭代器使用步骤:

1.使用集合中的方法iterator(),获取迭代器实现类对象,使用Iterator接口接收

2.使用Iteratar接口中的方法hasNext判断还有没有下一个元素

3.使用Iteratar接口中的方法next取出集合中的下一个元素

获取迭代器

Iterator<String> it = coll.iterator(); //多态   接口 = 实现类对象


Iterator接口常用方法如下:

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

String s = it.next();
System.out.println(s);  //姚明


public boolean hasNext() 如果元素可以迭代则返回true

boolean b = it.hasNext();   //判断集合中是否有元素
 System.out.println(b);


发现用迭代器太长,就用循环(一直数量用for 位置数量用while)

增强for循环(foreach)

专门用于遍历集合和数组 底层使用的也是迭代器,使用for循环的格式简化了迭代器的书写

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

sout(变量名);

}

ArrayList<String> arr = new ArrayList<>();
arr.add("长度为");
arr.add("得到");
arr.add("测测");
arr.add("尺寸为");
arr.add("人才网");
for (String i:arr) {
    System.out.println(i);
}


泛型

就是集合中 <> 中的部分·

有使用数据类型的时候都使用泛型 E

定义的时候不写数据类型写泛型,创建对象的时候在定义数据类型

含有泛型的类:

public class Deom<E> {
    private E name;
    public E getName() {
        return name;
    }
    public void setName(E name) {
        this.name = name;
    }
}


调用:

public static void main(String[] args) {
   Deom<String> d1 = new Deom<>();
   d1.setName("hcduis");
}


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

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

方法体

}

含有泛型的方法:在调用方法的时候确定泛型的数据类型,传递什么类型的参数,反省就是什么类型

public <M> void eat(M m){
}


调用

d1.eat(1);  //传递什么类型泛型就是什么类型  这是int类型
  d1.eat("黑暗时代");  //这是Sering类型


含有泛型的接口

在接口名后面加上

public interface Dopd<Q> {
    public abstract void ert(Q q);   //接口的抽象方法
}


有泛型接口的第一种使用方法:定义接口实现类,实现接口,指定接口的泛型

public final class 类名 implements 接口名<数据类型>{


}

public  class Dopdd implements Dopd<String>{
    @Override
    public void ert(String s) {        
    }
}


有泛型接口的第二种使用方法:接口使用什么泛型,那么接口类就使用什么泛型(相当于定义了一个含有泛型的类,创建对象的时候确定泛型的类型)

public class 类名<泛型> implements 接口名<泛型>{ }

public  class Dopdd<Q> implements Dopd<Q>{
    @Override
    public void ert(Q q) {
    }
    Dopd<String> dopd = new Dopdd<>();
}


泛型通配符

泛型的通配符“?”代表任意的数据类型

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

定义一个方法能遍历所有类型的ArrayList集合

这时候我们不知道ArrayList集合使用什么数据类型,可以泛型的通配符 ?来接收数据

public  class Dopdd {
    public static void main(String[] args) {
        ArrayList<Integer> arra1 = new ArrayList<>();
        arra1.add(1);
        arra1.add(2);
        arra1.add(3);
        arra1.add(4);
        ArrayList<String> arra2 = new ArrayList<>();
        arra2.add("A");
        arra2.add("B");
        printArray(arra1);
        printArray(arra2);
    }
    public static void printArray(ArrayList<?> list){
        Iterator<?> it = list.iterator(); //使用迭代器
        while (it.hasNext()){
            Object o = it.next();
            System.out.println(o);
        }
    }
}


通配符高级使用

泛型的上限

格式:? extends E

意义:只能接收该类型及其子类 代表使用的泛型只能是E类型的子类或者本身

泛型的下限

格式:? super E

意义:只能接收该类型及其父类型 代表使用的泛型只能是E类型的弗雷或者本身

相关文章
|
8月前
|
存储 缓存 Java
集合框架之 Set 集合——特定归纳总结
集合框架之 Set 集合——特定归纳总结
22 0
|
3月前
|
存储 安全 算法
Java泛型与集合:类型安全的集合操作实践
Java泛型与集合:类型安全的集合操作实践
|
3月前
|
存储 编译器 C++
C++:迭代器的封装思想
C++:迭代器的封装思想
15 0
|
10月前
|
C#
【C#视频】面向对象、数据类型
【C#视频】面向对象、数据类型
|
11月前
|
设计模式 人工智能 算法
Java迭代器模式:优雅遍历集合,实现简洁高效的迭代器设计(下)
Java迭代器模式:优雅遍历集合,实现简洁高效的迭代器设计
186 0
|
11月前
|
设计模式 算法 Java
Java迭代器模式:优雅遍历集合,实现简洁高效的迭代器设计(上)
Java迭代器模式:优雅遍历集合,实现简洁高效的迭代器设计
9382 1
Java迭代器模式:优雅遍历集合,实现简洁高效的迭代器设计(上)
数据结构74-集合封装
数据结构74-集合封装
33 0
数据结构74-集合封装
|
存储 Java 容器
Java集合超详解一文带你玩转集合(一)
- 元素性: 集合:引用类型(存储基本类型时自动装箱) 数组:基本类型、引用类型 - 元素个数 集合:不固定,可以任意扩容 数组:固定,不能改变容量,列如定义一个int类型长度为5的数组只能最多存入5个在多就不行了 - 集合的好处 不受容器大小限制,可以随时添加、删除元素 提供了大量操作元素的方法(判断、获取等)
|
安全 Java
Java集合超详解一文带你玩转集合(二)
即泛指任意类型,又叫参数化类型(ParameterizedType)对具体类型的使用起到辅助作用,类似于方法的参数。
|
存储
面向对象——迭代器
面向对象——迭代器
108 0