Java中的集合(Connection)

目录:

一、什么是集合?

说白了就是,集合就是与存储数据相关。(看下面的体系图)

二、为什么要有集合?

之前我们保存多个数据,用的是数组,然而数组有很多不足:

数组的缺点:

  • 一开始就必须指定数组长度,而且一旦指定,不能修改。
  • 保存的必须是同一类型的元素。
  • 使用数组进行元素的添加/删除,很麻烦。

为了避免这些缺点,我们创造了集合。

集合

  • 可以动态保存任意多个对象,数据类型也可以不一样,使用很方便。
  • 提供了一系列的操作对象的方法:add、remove、set、get等。
  • 使用集合添加、删除元素,很方便。

二、集合的体系图

1、单列集合——Collection:

2、双列集合——Map:

 3、单列集合和双列集合

  • 单列集合中放的是单个对象,双列集合放的是键值对形式的对象。
  • Collection 接口有两个重要的子接口 List 和 Set,他们的实现子类都是单列集合(单个单个的元素)。
  • Map 接口的实现子类是双列集合,存放的是键值对数据,Key-value。

三、Collection接口和常用方法

public interface Collection<E> extends Iterable<E>

1、Collection接口的特点

  • 实现了Collection接口的类(其父类实现了的也算),可以存放多个元素
  • 实现了Collection接口的类,有些可以存放重复的元素有些不行
  • 实现了Collection接口的类,有些是有序的(有序指的是存放和取出的顺序一致)(List),有些是无序的(Set)。
  • Collection接口没有直接的实现子类,是通过它的子接口Set和List来实现的。

2、Collection接口的常用方法

(以实现该接口的ArrayList子类为例)

 四、Collection接口遍历元素的方式

注意:只要是实现了该接口的类,都有下面这两种遍历元素的方法。

方式一、使用Iterator(迭代器)

迭代器的目的是遍历输出数组元素。

Iterator是util包中的接口,即java.util.Iterator。

(1)Iterator遍历数组原理:

(2)Iterator接口中的常用方法:

  • hasNext():判断是否还有下一个元素。
  • next():下移一位,将下移后指向的数组位置中的元素返回。

 

下面上代码:

package com.hspedu.System_;

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

public class Iterator_ {
    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        arrayList.add("小明");
        arrayList.add("唔怕");
        arrayList.add("大黄");
        arrayList.add("区域");
        arrayList.add("九龙");
        //1.使用 iterator()方法 得到arrayList的迭代器
        //注意:接口是不能被实例化的,这里的 Iterator iterator 并不是实例化Iterator接口,而是对Iterator接口的引用
        Iterator iterator = arrayList.iterator();  //该iterator方法是ArrayList类中的,目的是创建arrayList对象的迭代器
        //2.使用while循环遍历
        while (iterator.hasNext()){  //判断是否还有数据
            Object obj = iterator.next();
            System.out.print(obj);
        }
    }
}

方式二、增强for循环

  • 增强for循环就是简化版的iterator,它可以用来代替iterator迭代器。
  • 增强for的底层仍然是迭代器。
  • 只能用于遍历数组or集合。

(1)基本语法

for(元素类型 元素名:集合名或数组名){
    访问元素
}

//例如下面的:
for(Object object : col){
    sout(object);
}

五、List接口和常用方法

1、List接口介绍

  • List接口是Collection接口的子接口。
  • List集合类中的元素是有序的(添加顺序和取出顺序一致)、而且可以重复。
  • List集合类中的元素支持索引,即和数组一样,每个元素都有自己的索引值。

 2、List接口中的常用方法

3、List集合的三种遍历方式

 六、ArrayList实现类

Java中的ArrayList_m1m-FG的博客-CSDN博客_java引入arraylist 看链接的这篇文章:Java中的ArrayList_m1m-FG的博客-CSDN博客_java引入arraylist

七、Vector实现类

1、Vector类介绍

  • Vector类是List接口的实现类。
  • Vector类是将数据放在对象数组中。

  • Vector类是线程同步的,即线程安全,Vector的很多方法都带有synchronized。

  •  开发过程中,需要线程同步安全时,考虑使用Vector类。(即有多个线程同时操作该集合时,使用Vector类)

2、Vector VS ArrayList

八、LinkedList实现类

1、LinkedList类介绍

  • LinkedList底层实现了双向链表和双端队列的特点。
  • LinkedList可以添加任意元素(包括null),元素可以重复。
  • 线程不安全,没有实现线程同步。

2、LinkedList底层操作机制

LinkedList底层维护了一个双向链表。

LinkedList中维护了两个属性first和last分别指向首节点和尾结点。

每个结点(Node对象),里面又维护了prev、next、item三个属性,其中通过prev指向前一个,通过next指向后一个结点,最终实现双向链表。

因此,LinkedList中元素的添加和删除,不是通过数组完成的,相对来说效率较高。

 3、LinkedList的增删改查

 4、LinkedList VS ArrayList

 九、Set接口和常用方法

1、Set接口介绍

  • 无序(添加和取出的顺序不一致),没有索引。
  • 不允许重复元素,所以最多包含一个null。

2、Set接口常用方法

和List接口一样,Set接口也是Collection接口的子接口。因此,常用方法和Collection接口一样。

3、Set接口的遍历方式

同Collection的遍历方式一样,因为它是该接口的子接口。

  1. 可以使用迭代器。
  2. 用增强for循环。
  3. 但是!不能使用索引的方式来获取。(即没有普通的for)

十、HashSet实现类

1、HashSet类介绍

  • 该类实现了Set接口。
  • HashSet实际是HashMap。

  • HashSet可以存放空值,但是只能有一个null。
  • HashSet不能保证元素是有序的。(即存放元素和取出元素的顺序不一定一致)
  • 不能有重复元素和对象。(Set接口中已经说过)

2、HashSet类的底层机制

HashSet的底层是HashMap,HashMap的底层是(数组+链表+红黑树)。

有需要再看老韩的视频:0519_韩顺平Java_数组链表模拟_哔哩哔哩_bilibili

扩容机制、原阿玛分析和下面的Map接口内容没看,有需要再补。

Tips:只要实现了某个接口,其实现类就拥有了该接口的特点。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m1m-FG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值