IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JavaSE(15):集合类库(上) -> 正文阅读

[Java知识库]JavaSE(15):集合类库(上)

1、集合的概述

1.1 集合的由来

  • 当需要在Java程序中记录单个数据内容时,则声明一个变量。
  • 当需要在Java程序中记录多个类型相同的数据内容时,声明一个一维数组。
  • 当需要在Java程序中记录多个类型不同的数据内容时,则创建一个对象。
  • 当需要在Java程序中记录多个类型相同的对象数据时,创建一个对象数组。
  • 当需要在Java程序中记录多个类型不同的对象数据时,则准备一个集合

1.2 集合的框架结构

集合的框架结构

  • Java中集合框架顶层框架是:java.util.Collection集合 和 java.util.Map集合。
  • 其中Collection集合中存取元素的基本单位是:单个元素。
  • 其中Map集合中存取元素的基本单位是:单对元素。

2、Collection集合

2.1 基本概念

  • java.util.Collection接口是List接口、Queue 接口以及Set接口的父接口,因此该接口里定义的方法既可用于操作List集合,也可用于操作Queue集合和Set集合。

2.2 常用的方法

方法声明功能介绍
boolean add(E e)向集合中添加对象
boolean addAll(Collection<? extends E> c)用于将参数指定集合c中的所有元素添加到当前集合中
boolean contains(Object o)判断是否包含指定对象
boolean containsAll(Collection<?> c)判断是否包含参数指定的所有对象
boolean retainAll(Collection<?> c)保留当前集合中存在且参数集合中存在的所有对象(相当于求交集)
boolean remove(Object o)从集合中删除对象
boolean removeAll(Collection<?> c)从集合中删除参数指定的所有对象
void clear()清空集合
int size()返回包含对象的个数
boolean isEmpty()判断是否为空
boolean equals(Object o)判断是否相等
int hashCode()获取当前集合的哈希码值
Object[] toArray()将集合转换为数组
Iterator iterator()获取当前集合的迭代器
  • 笔试考点一:
/*
集合c1中的元素有:[one, 2, three, 4]
集合c2中的元素有:[three, 4]
*/
// 判断集合c1中是否包含集合c2中的所有元素,
// 只有集合c2中的所有元素都在集合c1中出现才会返回true,否则都是false
b1 = c1.containsAll(c2);
System.out.println("b1 = " + b1); // true

// 判断集合c1中是否拥有集合c2这个整体为单位的元素
b1 = c1.contains(c2);
System.out.println("b1 = " + b1); // false
/*
集合c1中的元素有:[one, 2, [three, 4]]
集合c2中的元素有:[three, 4]
*/
b1 = c1.containsAll(c2);
System.out.println("b1 = " + b1); // false

b1 = c1.contains(c2);
System.out.println("b1 = " + b1); // true
  • 笔试考点二:
/*
集合c1中的元素有:[2, three, 4]
集合c3中的元素有:[4, five]
*/
// 从集合c1中删除集合c3中的所有元素,
// 本质上就是一个一个元素进行删除,有元素则删除,否则不删除
// 只要有元素被删除就返回true,否则返回false
b1 = c1.removeAll(c3);
System.out.println("b1 = " + b1); // true
System.out.println("c1 = " + c1); // [2, three]
System.out.println("c3 = " + c3); // [4, five]
/*
集合c1中的元素有:[2, three, 4]
集合c3中的元素有:[4, five]
*/
// 删除整体对象c3
b1 = c1.remove(c3);
System.out.println("b1 = " + b1); // false
System.out.println("c1 = " + c1); // [2, three, 4]

3、Iterator接口

3.1 基本概念

  • java.util.Iterator接口主要用于描述迭代器对象,可以遍历Collection集合中的所有元素。
  • java.util.Collection接口继承Iterable接口,因此所有实现Collection接口的实现类都可以使用该迭代器对象。

3.2 常用的方法

方法声明功能介绍
boolean hasNext()判断集合中是否有可以迭代/访问的元素
E next()用于取出一个元素并指向下一个元素
void remove()用于删除访问到的最后一个元素
  • 案例题目:遍历Collection集合中的所有元素。
  • 遍历方式一:自动调用toString方法,打印String类型的整体。
Collection c1 = new ArrayList();
c1.add("one");
c1.add(2);
c1.add(new Person("zhangfei", 30));
System.out.println("c1 = " + c1); 
// [one, 2, Person{name='zhangfei', age=30}]
  • 遍历方式二:使用迭代器来遍历集合中的所有元素,更加灵活。
// 获取当前集合中的迭代器对象
Iterator iterator1 = c1.iterator();
// 使用迭代器来模拟toString方法的打印效果
StringBuilder sb1 = new StringBuilder();
sb1.append("[");
while (iterator1.hasNext()) {
    Object obj = iterator1.next();
    // 当获取的元素是最后一个元素时,则拼接元素加中括号
    if (!iterator1.hasNext()) {
        sb1.append(obj).append("]");
    } else {
        // 否则拼接元素加逗号加空格
        sb1.append(obj).append(",").append(" ");
    }
}
System.out.println("c1 = " + sb1);
// [one, 2, Person{name='zhangfei', age=30}]
  • 遍历方式三:使用 for each结构实现集合和数组中元素的遍历,代码简单且方法灵活。
for (Object obj : c1) {
    System.out.println("取出来的元素是:" + obj);
}

4、for each循环

4.1 基本概念

  • Java5推出了增强型for循环语句,可以应用数组和集合的遍历。
  • 是经典迭代器的“简化版”。

4.2 语法格式

for(元素类型 变量名 : 数组/集合名称) {
    循环体;
}

4.3 执行流程

  • 不断地从数组/集合中取出一个元素赋值给变量名并执行循环体,直到取完所有元素为止。
int[] arr = new int[] {11, 22, 33, 44, 55};
for (int i : arr) {
    System.out.println("i = " + i);
}
/*
i = 11
i = 22
i = 33
i = 44
i = 55
*/

5、List集合

5.1 基本概念

  • java.util.List集合是Collection集合的子集合,该集合中允许有重复的元素并且有先后放入次序。

  • 该集合的主要实现类有:ArrayList类、LinkedList类、Stack类、Vector类。

  • 其中ArrayList类的底层是采用动态数组进行数据管理的,支持下标访问,增删元素不方便。
    ArrayList类的底层原理

  • 其中LinkedList类的底层是采用双向链表进行数据管理的,访问不方便,增删元素方便。
    LinkedList类的底层原理

  • 可以认为ArrayList和LinkedList的方法在逻辑上完全一样,只是在性能上有一定的差别,ArrayList更适合于随机访问而LinkedList更适合于插入和删除;在性能要求不是特别苛刻的情形下可以忽略这个差别。

  • 其中Stack类的底层是采用动态数组进行数据管理的,该类主要用于描述一种具有后进先出特征的数据结构,叫做(last in first out LIFO)。

  • 其中Vector类的底层是采用动态数组进行数据管理的,该类与ArrayList类相比属于线程安全的类,效率比较低,以后开发中基本不用。

5.2 常用的方法

方法声明功能说明
void add(int index, E element)向集合中指定位置添加元素
boolean addAll(int index, Collection<? extends E> c)向集合中添加所有元素
E get(int index)从集合中获取指定位置元素
int indexOf(Object o)查找参数指定的对象
int lastIndexOf(Object o)反向查找参数指定的对象
E set(int index, E element)修改指定位置的元素
E remove(int index)删除指定位置的元素
List subList(int fromIndex, int toIndex)用于获取子List

6、Queue集合

6.1 基本概念

  • java.util.Queue集合是Collection集合的子集合,与List集合属于平级关系。
  • 该集合的主要用于描述具有先进先出特征的数据结构,叫做队列(first in first out FIFO)。
  • 该集合的主要实现类是LinkedList类,因为该类在增删方面比较有优势。

6.2 常用的方法

方法声明功能介绍
boolean offer(E e)将一个对象添加至队尾,若添加成功则返回true
E poll()从队首删除并返回一个元素
E peek()返回队首的元素(但并不删除)
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-21 15:13:47  更:2021-08-21 15:15:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 20:56:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码