【Java集合】集合框架初识


前言

在java.util包中提供了一套性能优良,使用方便的Java集合框架。Java集合的出现是为了弥补数组的不足,因为数组中不能让存放对象,且数组的长度是固定的,不能动态扩容。集合比数组显得更加的灵活实用。

一、集合是什么?

  • 集合是用来存放对象的一种容器,准确的说存放的是对象的引用,对象依旧存储在堆中。
  • 集合中存放基本数据类型时会进行自动装箱为引用类型。
  • 集合的容量支持动态变化。

二、集合框架图


从上面的集合可以看出Java集合框架主要包含两种类型的容器,一个是Collection,一个是Map。
Collection主要是三个子接口:List,Set,Queue
List:元素按进入先后有序保存,可重复。
Set:仅接收一次,不可重复,并做内部排序。

  • List接口被AbstractList实现,AbstractList有三个子类:ArrayList,LinkedList,Vector

    • ArrayLIst:是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。支持随机访问,线程不安全。
    • LinkedList:是一个双向链表实现,不会按照线性的顺序存储,与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。
    • Vetor:与ArrayList数组实现类似,但其方法上使用了synchronized关键字,线程安全,他还有一个实现类stack。
  • Set接口被AbstractSet实现,AbstractSet有两个实现类:HashSet,TreeSet

    • HashSet:其底层其实是包装了一个HashMap去实现的。HashSet采用HashCode算法来存取集合中的元素,因此具有比较好的读取和查找性能。
    • TreeSet:实现了SortedSet接口,顾名思义这是一种排序的Set集合,底层是用TreeMap实现的,本质上是一个红黑树原理。

Map主要是两个子接口:HashMap,TreeMap

  • HashMap:是一个散列表,它存储的内容是键值对(key-value)映射。实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。 是无序的,即不会记录插入的顺序。
  • TreeMap:实现了SortMap接口,使用红黑树对所有的key进行排序。

三、迭代器

Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法。
在这里插入图片描述
如上图所示,Iterator的核心方法next(),hasNext(),remove()。

  • next方法会返回迭代器的下一个元素,并且更新迭代器的状态。
  • hasNext用于检测集合中是否还有元素。
  • remove将迭代器返回的元素删除。
// 示例
import java.util.ArrayList;
import java.util.Iterator;

public class Test {
    public static void main(String[] args) {

        // 创建集合
        ArrayList<String> list= new ArrayList<String>();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");

        // 获取迭代器
        Iterator<String> it = list.iterator();

        // 输出集合中的第一个元素
        System.out.println(it.next());  //A

		//循环打印
		while(it.hasNext()) {
			String item=it.next();
			if("A".equals(item)){
				it.remove();//删除A
			}
    		System.out.println(it.next());
		}
    }
}

Collections和Arrays中包含了一系列的静态方法来操作集合,比如排序,遍历等。
在这里插入图片描述
在这里插入图片描述

总结

Java集合框架为程序员提供了预先包装的数据结构和算法来操纵他们。

集合是一个对象,可容纳其他对象的引用。集合接口声明对每一种类型的集合可以执行的操作。

集合框架的类和接口均在java.util包中。

任何对象加入集合类后,自动转变为Object类型,所以在取出的时候,需要进行强制类型转换。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值