最全面复习---Java集合框架

最近又系统的复习了一下Java集合框架的相关知识,下面我将逐个记录下这块的知识。

先讲讲什么是对象数组吧

对象数组:数组即可以存储基本的数据类型,也可以存储引用类型。它存储应用类型的时候就叫做对象数组。

首先我们要知道,Java语言是一个面向对象语言,我们需要操作很多的对象,所以我们需要存储这多个对象,我们就需要一些容器

(StringBuffer和数组),但是呢,数组的长度是固定的,不能适应变化的需求,所以java提供了集合供我们使用

集合Collection

1、集合和数组的区别

  • 长度区别
    • 数组是固定的
    • 集合是可变的
  • 内容区别
    • 数组可以是基本类型,也可以是引用类型
    • 集合只能是引用类型
  • 元素内容
    • 数组只能存储同一种类型
    • 集合可以存储不同的类型(其实集合一般存储的也是同一种类型)

2、集合的继承体系结构

学习集合框架我们一定要清楚集合的继承体系结构,我相信不少同学都跟我一样,学完就忘了hhh,来复习一下吧

由于需求的不同,Java给我们提供了不同的集合类,二者多个集合类的数据结构不同,但是它们都是要提供存储和遍历功能的

把他们的共性向上提取,最终形成了集合的继承体系结构

  • Collection
    • List
      • ArrayList
      • Vector
      • LinkedList
    • Set
      • HashSet
      • TreeSet

上面就是集合的一个总的体系结构

3、Collection是集合的顶层接口,子体系有重复的,有唯一的,有无序的,有有序的

使用步骤:

  1. 创建集合对象
  2. 创建元素独享
  3. 把元素添加到集合
  4. 遍历集合
    1. 通过集合对象获取得带器对象
    2. 通过迭代器对象的hasNext方法判断是否有元素
    3. 通过迭代器对象的next方法获取元素并移动到下一个位置
功能概述:
添加功能
boolean add(Object obj):添加一个元素
boolean addAll(Collection c):添加一个集合的元素
删除功能
void clear():移除所有元素
boolean remove(object o):移除一个元素
boolean removeAll(Collection c):移除一个集合的元素
判断功能
boolean contains(Object c):判断集合中是否包含指定的元素
boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(是一个还是所有)
boolean isEmpty(0:判断集合是否为空
获取功能
Iterator<E> iterator() 重点
迭代器,是遍历集合的一种方式
是依赖于集合存在的
Iterator it = c.iterator()
迭代器方法:hasnext()    next()
迭代器为什么不定义一个类,而定义一个接口?
假设迭代器定义的是一个类,这样我们可以创建该类的对象,调用该类的方法来实现集合的遍历。
但是java中提供了很多的集合类,而这些集合类的数据结构是不同的,所以存储方式和遍历方式是不同的。
最终,就没有定义迭代器类。
而无论你是哪种集合,你都应该具备遍历或者获取功能,并且最好在辅助于判断功能,这样在获取前先判断再获取,这样就更不容易出错。所以判断和获取应该是一个集合遍历所具备的功能,每种集合方式又不太一样,所以提取出来这两个功能,并不提供具体实现,这种方式就是接口
那么真正的具体实现类在哪里呢?
在真正的具体的子类中,以内部类的方式体现。

长度功能
int size():元素的个数
面试题:数组有没有length()方法?没有
字符串有没有length()方法?有
集合有没有length()方法?没有
交集功能
boolean retainAll(Collection c):两个集合都有的元素?思考元素去哪儿了,返回的boolean又是什么意思?
7.把集合转换为数组
 Object[] toArray()

4、Collection集合的案例(遍历方式 迭代器)

a、存储字符串并遍历

import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;

public class CollectionDemo{
    public static void main(String[] args){
        Collection c = new ArrayList();
        c.add("hello");
        c.add("world");
        c.add("java");
        Iterator it = c.Iterator();
        while(it.hasNext()){
            String s = (String) it.next();
            System.out.println(s);
        }
    }
}

b、存储自定义对象并遍历

import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;
public class Student{
    private String name;
    private age;
    
    public Student(){}
    
    public Student(String name,String age){
        this.name = name;
        this.age = age;
    }
    public String getName() {
    return name;
}

    public void setName(String name) {
    this.name = name;
}

    public int getAge() {
    return age;
}

    public void setAge(int age) {
    this.age = age;
}
}

public static StudentDemo{
    public static void main(String[] args){
        Collection c = new Arraylist();
        
        Student s1 = new Student("公孙离",27);
        Student s2 = new Student("武则天",24);
        Student s3 = new Student("花木兰",25);
        
        c.add(s1);
        c.add(s2);
        c.add(s3);
        
        Iterator it = c.iterator();
        while(it.hasNext()){
            Student s = (Student) it.next();
            System.out.println(s)
        }
    }
}

传送门:List

传送门:Set

    

发布了120 篇原创文章 · 获赞 37 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Zhengxinyu666/article/details/99542758