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知识库 -> Java 集合 -> 正文阅读

[Java知识库]Java 集合

1、为什么需要集合

  1. java是面向对象的语言,为了方便操作多个对象,我们需要把对象存储起来。

  2. 既然要存储多个对象,那么就需要一个容器

  3. java为我们提供了集合

2、数组和集合的区别

  • 长度的区别

    • 数组长度固定
    • 集合长度可变
  • 元素的数据类型

    • 数组只能够存储的基本数据类型,也可以存储引用类型(String)
    • 集合只能存储引用类型(假设你存储的是int,java是会动装箱成integer)

集合的大致结构:
在这里插入图片描述

3 List集合

List集合主要有三个子类

  1. ArrayList (底层是数组)
  2. LinkList (底层是链表)
  3. Vector (底层是数组)

3.1 ArrayList集合

查看ArrayList的层次结构图:

? 右键类
在这里插入图片描述

在这里插入图片描述

ArrayList底层其实就是?个数组,ArrayList中有扩容这么?个概念,正因为它扩容,所以它能够实现“动态”增?

常用方法:

ArrayList 常用方法列表如下:
(点击对应的方法到相应网站查看详解。)

方法描述
add()将元素插入到指定位置的 arraylist 中
addAll()添加集合中的所有元素到 arraylist 中
clear()删除 arraylist 中的所有元素
clone()复制一份 arraylist
contains()判断元素是否在 arraylist
get()通过索引值获取 arraylist 中的元素
indexOf()返回 arraylist 中元素的索引值
removeAll()删除存在于指定集合中的 arraylist 里的所有元素
remove()删除 arraylist 里的单个元素
size()返回 arraylist 里元素数量
isEmpty()判断 arraylist 是否为空
subList()截取部分 arraylist 的元素
set()替换 arraylist 中指定索引的元素
sort()对 arraylist 元素进行排序
toArray()将 arraylist 转换为数组
toString()将 arraylist 转换为字符串
ensureCapacity()设置指定容量大小的 arraylist
lastIndexOf()返回指定元素在 arraylist 中最后一次出现的位置
retainAll()保留 arraylist 中在指定集合中也存在的那些元素
containsAll()查看 arraylist 是否包含指定集合中的所有元素
trimToSize()将 arraylist 中的容量调整为数组中的元素个数
removeRange()删除 arraylist 中指定索引之间存在的元素
replaceAll()将给定的操作内容替换掉数组中每一个元素
removeIf()删除所有满足特定条件的 arraylist 元素
forEach()遍历 arraylist 中每一个元素并执行特定操作
public class ArrayList01 {
    /**
     * ArrayList的常用方法
     */

    public static void main(String[] args) {
        //add方法 add(E element) 默认再末尾进行加入
        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(1);
        arrayList.add(2);
        System.out.println(arrayList.get(0));
        System.out.println(arrayList.get(1));
        
        //List的遍历,forEach方法
        System.out.println("add--------");
        for (Integer element : arrayList) {
            System.out.println(element);
        }
        
        //List的遍历,常规方法
        System.out.println("------------");
        int size = arrayList.size();	//获取集合的长度
        for (int i = 0; i < size; i++) {
            System.out.println(arrayList.get(i));
        }
        
        //使用迭代器:
        //add(int index,E element) 在下标中插入
        //arrayList.add(1,3);
        System.out.println("------------");
 		Iterator iter = arrayList.iterator();
		while(iter.hasNext()) {
			int element = (Integer) iter.next();
			System.out.println(element );
		}

        //set方法  set(int index,E element) 替换下标为index的元素,新的元素为element
		//arrayList.set(1,2);
        System.out.println("Set--------");
        for (Integer element : arrayList) {
            System.out.println(element);
        }

        //remove方法  remove(int index) 删除下标为index的元素
		//arrayList.remove(1);
        System.out.println("remove------");
        arrayList.forEach(integer -> {
            System.out.println(integer);
        });

    }

}

由于ArrayList是List的子类,所以定义的时候也是可以这样定义的:
List<?> list = new ArrayList<>();

3.2 LinkedList集合

在这里插入图片描述

  1. Java的LinkedList是一种常用的数据容器,与ArrayList相比,LinkedList的增删操作效率更高,而查改操作效率较低。
  2. LinkedList 实现了Queue接口,能当作队列使用。
  3. LinkedList 实现了List 接口,能对它进行列表操作。
  4. LinkedList 实现了Deque 接口,即能将LinkedList当作双端队列使用。
  5. LinkedList 实现了Cloneable接口,能克隆。
  6. LinkedList 实现了java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。
1.public boolean add(E e),链表末尾添加元素,返回是否成功;
public void add(int index, E element),向指定位置插入元素;
public boolean addAll(Collection<? extends E> c),将一个集合的所有元素添加到链表后面,返回是否成功;
public boolean addAll(int index, Collection<? extends E> c),将一个集合的所有元素添加到链表的指定位置后面,返回是否成功;
public void addFirst(E e),添加到第一个元素;
public void addLast(E e),添加到最后一个元素;
public boolean offer(E e),向链表末尾添加元素,返回是否成功;
public boolean offerFirst(E e),头部插入元素,返回是否成功;
public boolean offerLast(E e),尾部插入元素,返回是否成功;
2.public void clear(),清空链表;
public E removeFirst(),删除并返回第一个元素;
public E removeLast(),删除并返回最后一个元素;
public boolean remove(Object o),删除某一元素,返回是否成功;
public E remove(int index),删除指定位置的元素;
public E poll(),删除并返回第一个元素;
public E remove(),删除并返回第一个元素;
3.public boolean contains(Object o),判断是否含有某一元素;
public E get(int index),返回指定位置的元素;
public E getFirst(), 返回第一个元素;
public E getLast(),返回最后一个元素;
public int indexOf(Object o),查找指定元素从前往后第一次出现的索引;
public int lastIndexOf(Object o),查找指定元素最后一次出现的索引;
public E peek(),返回第一个元素;
public E element(),返回第一个元素;
public E peekFirst(),返回头部元素;
public E peekLast(),返回尾部元素;
4.public E set(int index, E element),设置指定位置的元素; 

4、Set集合

Set是一个不能包含重复元素的Collection。它模拟了数学集合抽象。

Set接口仅包含从Collection接口继承的方法,并添加禁止重复元素的限制。

Set还为equalshashCode操作的行为添加了一个更强的规范,允许Set实例有意义地进行比较,即使它们的实现类型不同。

Set在HashSetTreeSetLinkedHashSet等各种类中都有实现。

Set声明的方法如下表中所示 -

编号方法描述
1add()添加一个对象到集合中。
2clear()从集合中删除所有对象。
3contains()如果指定的对象是集合中的元素,则返回true
4isEmpty()如果集合没有元素,则返回true
5iterator()返回集合的Iterator对象,该对象可用于检索对象。
6remove()从集合中删除指定对象。
7size()返回集合中的元素数。
8first()/last()返回集合第一个元素/返回集合最后一个元素。这是在TreeSet中的方法

4.2 hashSet

HashSet的要点:

  • 实现Set接?
  • 不保证迭代顺序
  • 允许元素为null
  • 底层实际上是?个HashMap实例
  • ?同步
  • 初始容量?常影响迭代性能

4.3 LinkedHashSet

解决了hasSet的无序

5、 Map集合

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7k8gLwxt-1637117669640)(集合.assets\image-20210415175929048.png)]

Alt+7查看当前类的所有方法属性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jSehkwQS-1637117669642)(集合.assets\image-20210415180929123.png)]
注意Map同样和set是一个接口


Map接口的常用方法

V和Set代表返回的数据类型

方法名称说明
V get(Object key)返回 Map 集合中指定键对象所对应的值。V 表示值的数据类型
V put(K key, V value)向 Map 集合中添加键-值对,返回 key 以前对应的 value,如果没有, 则返回 null
V remove(Object key)从 Map 集合中删除 key 对应的键-值对,返回 key 对应的 value,如果没有,则返回null
Set entrySet()返回 Map 集合中所有键-值对的 Set 集合,此 Set 集合中元素的数据类型为 Map.Entry
Set keySet()返回 Map 集合中所有键对象的 Set 集合

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cFcWDl4t-1637117669644)(集合.assets\image-20210415181234903.png)]

可见Map的子类有这些
hashMapLinkedHashMap

  • HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,==需要重写键的hashCode()方法、equals()方法。 ==

  • LinkedHashMap:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-18 11:04:23  更:2021-11-18 11:05:18 
 
开发: 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年11日历 -2024/11/24 2:23:01-

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