Java基础之集合框架系列(一)

1.体系概述

一句话概括,集合是存储Java对象最常用的一种方式

通常所用的List和Set系列集合的最顶层为Collection接口

1.集合框架的结构如下:

java集合框架

ps:图片来自网络

2.简单说明:

List:元素是有序的,且元素可以重复,因为该集合体系有索引。

Set:元素是无序的,即元素存入和取出的顺序不一定一致。元素不可以重复,无索引。

Map:使用键值对进行存取操作,键唯一。

3.常见的两个疑问

数组和集合类同是容器,有何不同?

  • 数组虽然也可以存储对象,但长度是固定的;集合长度是可变的
  • 数组中可以存储基本数据类型和对象,集合只能存储对象(但可以是不同类型的对象)
  • 集合存储的都是对象的引用(地址)

为什么会出现这么多的容器?

因为每一个容器对数据的存储方式都有不同,这种存储方式即所谓的数据结构。多种容器对应于不同的使用场景。

2.共性方法

1.常见的共性方法:

boolean add(E e)
向此 collection中添加指定的元素。

boolean addAll(Collection<? extends E> c)
将指定 collection 中的所有元素都添加到此 collection 中。

void clear()
移除此 collection 中的所有元素。

boolean contains(Object o)
如果此 collection 包含指定的元素,则返回 true。

boolean containsAll(Collection <?>c)
如果此 collection 包含指定 collection 中的所有元素,则返回 true。

boolean equals(Object o)
比较此 collection 与指定对象是否相等。
重写了继承于Object的方法

int hashCode()
返回此 collection 的哈希码值。

boolean isEmpty()
如果此 collection 不包含元素,则返回 true。
即调用size()返回为0时

Iterator iterator()
返回在此 collection 的元素上进行迭代的迭代器。

boolean remove(Object o)
从此 collection 中移除指定元素的单个实例,如果存在的话

boolean removeAll(Collection <?> c)
移除此 collection 中那些也包含在指定 collection 中的所有元素

boolean retainAll(Collection <?> c)
仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
可以看作是一次取交集操作

int size()
返回此 collection 中的元素数。

Object[] toArray()
返回包含此 collection 中所有元素的数组。

T[] toArray(T[] a)
返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

2.示例代码

public class CollectionCommonDemo {

    public static void main(String[] args) {
         //创建集合对象,使用Collection接口子类ArrayList
         ArrayList al=new ArrayList();

         //添加元素
         al.add("示例元素1");
         al.add("示例元素2");
         al.add("示例元素3");
         al.add("示例元素4");
         al.add("示例元素5");

         //直接输出集合
         System.out.println(al);

         //1.判断指定元素是否存在
         boolean isExist=al.contains("示例元素3");
         System.out.println("指定元素是否存在:"+isExist);

         //2.判断集合是否为空
         boolean isEmpty=al.isEmpty();
         System.out.println("集合是否为空:"+isEmpty);

         //3.返回集合元素个数
         int count=al.size();
         System.out.println("集合元素个数:"+count);

         //4.移除指定元素
         al.remove("示例元素4");
         System.out.println("移除指定元素后集合的元素个数:"+al.size());

         //5.清除集合所有元素
         al.clear();
         System.out.println("清除集合后集合的元素个数"+al.size());
         System.out.println("清除集合后判断集合是否为空:"+al.isEmpty()); 
    }

}

运行结果:

[示例元素1, 示例元素2, 示例元素3, 示例元素4, 示例元素5]
指定元素是否存在:true
集合是否为空:false
集合元素个数:5
移除指定元素后集合的元素个数:4
清除集合后集合的元素个数0
清除集合后判断集合是否为空:true

说明:以上程序使用ArrayList进行演示,集合对象存储字符串内容

3.迭代器

1.概述

所谓迭代器,就是Java定义的一个专门用于`出集合元素的特殊对象

定义迭代器的原因:

集合种类多样,且数据的存储方式不尽相同。其取出操作不能以一个方法进行描述,因此java将取出这一动作封装成为一个类,用以适配所有的集合对象。并且该类定义在集合类内部(即定义为内部类),因此具体的取出方式就可以定义在集合内部。因此,该类就能直接访问集合内部的元素。使用时,只需要通过调用集合实例对象的iterator()方法获得该迭代器对象即可。

说明:这就是内部类在程序设计中的体现

获取迭代器:

Iterator<E> iterator()
返回在此 collection 的元素上进行迭代的迭代器。
说明:由集合的实例对象调用,返回一个iterator接口的子类对象

Iterator(接口)相关的方法:

boolean hasNext()
如果仍有元素可以迭代,则返回 true。

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

void remove()
从迭代器指向的 collection 中移除迭代器返回的当前元素

2.示例代码

迭代器的第一种输出方式:

 //部分代码
 //创建集合对象,使用Collection接口子类ArrayList
         ArrayList al=new ArrayList();

         //添加元素
         al.add("示例元素1");
         al.add("示例元素2");
         al.add("示例元素3");
         al.add("示例元素4");
         al.add("示例元素5");


        //利用迭代器输出集合元素
         Iterator it=al.iterator();

         //迭代器的第一种输出方式
         while(it.hasNext()){
             System.out.println("利用while操作迭代器:"+it.next());
         }

运行结果:

利用while操作迭代器:示例元素1
利用while操作迭代器:示例元素2
利用while操作迭代器:示例元素3
利用while操作迭代器:示例元素4
利用while操作迭代器:示例元素5

迭代器的第二种输出方式:

    //迭代器的第二种输出方式
        for(Iterator ir=al.iterator();it.hasNext();){
            System.out.println("利用for操作迭代器:"+it.next());
        }

运行结果:

利用for操作迭代器:示例元素1
利用for操作迭代器:示例元素2
利用for操作迭代器:示例元素3
利用for操作迭代器:示例元素4
利用for操作迭代器:示例元素5

说明:建议使用for循环而非while循环。因为在for循环中iterator是局部变量,可以节省系统内存

3.迭代器的一种错误使用

while(it.hasNext()){
    //在一个循环中连续调用两次next()方法
    System.out.println(it.next()+"..."+it.next());
}

说明:当集合中的元素是奇数时抛出异常NoSuchElementException。因此,在迭代器的循环中每次应该仅取出一个元素。

4.List部分

目录:

  1. List集合共性方法
  2. ListIterator
  3. List集合具体对象的特性
    1. ArrayList
    2. LinkedList
    3. Vector
  4. List集合具体对象应用实例
    1. LinkedList示例
    2. ArrayList示例

传送门:菜鸟猿大战Java之集合框架系列(二)

5.Set部分

  1. HashSet

    1. 概述
    2. HashSet存储自定义对象
  2. TreeSet

    1. 概述
    2. TreeSet存储自定义对象
    3. 二叉树
    4. 实现Comparator方式排序
    5. TreeSet实例

传送门:菜鸟猿大战Java之集合框架系列(三)

6.泛型

目录:

  1. 泛型概述
  2. 泛型使用
  3. 泛型类
  4. 泛型方法
  5. 静态方法泛型
  6. 泛型接口
  7. 泛型限定

传送门:java知识点之泛型

7.Map

目录:

  1. Map概述
  2. Map子类对象特点
  3. Map基础用法
    1. Map共性方法
    2. Map-keySet
    3. Map-entrySet
  4. HashMap
  5. TreeMap
  6. Map实例
  7. TreeMap实例
  8. Map拓展

传送门:菜鸟猿大战Java之集合框架系列(四)

8.工具类

目录:

  1. 集合工具类概述
  2. Collections类
    1. 排序
    2. 最值
    3. 二分查找
    4. 元素互换
    5. 批量填充
    6. 批量代替
    7. 反转集合
    8. 反转比较器
    9. 随机置换
    10. 集合线程安全性
  3. Arrays类
    1. 相关方法
    2. 数组变为字符串
    3. 数组变为集合
    4. 集合转成数组

传送门:菜鸟猿大战Java之集合框架系列(五)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值