java常用集合

本文介绍了Java集合框架的基础概念,包括集合的由来、数组与集合的区别、集合的主要分类及其特点。详细探讨了List、Set和Map等核心接口及其实现类如ArrayList、HashSet、HashMap等的功能与应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,集合概述
(1)集合的由来
Java是面向对象的语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们必须把多个对象进行存储。已有的容器类型有:数组和StringBuffer。但是,StringBuffer的结果是一个字符串,不一定满足我们的要求,所以我们只能选择数组,这就是对象数组。而对象数组又不能适应变化的需求,因为数组的长度是固定的,此时,为了适应变化的需求,Java就提供了集合类。

(2)数组和集合区别
1)长度区别
数组的长度固定;集合长度可变

2)内容不同
数组存储的是同一种类型的元素;集合可以存储不同类型的元素

3)元素的数据类型问题
数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用类型。

(3)集合的分类
存储多个元素会有不同的需求,针对这些不同的需求,Java就提供了不同的集合类。下边列出了常用的集合类别:

Collection概述:它是Collection层次结构中的根接口。Collection表示一组对象,这些对象也称为collection的元素。一些collection允许有重复的元素,而另一些则不允许。一些collection是有序的,而另一些则是无序的。           
List概述:它的类型也是接口,称为有序的collection(也称为序列)(注意:这里所说的有序不是说List集合中元素从小到大或者从大到小排列,而是说,元素“出”集合的顺序和“进”集合的顺序是一样的)。使用此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素;与set不同,列表List通常允许重复的元素。 
 

 

在平常的代码开发中,集合类是经常会使用到的,比如用于列表缓存的ArrayList,用于做映射关系的Map等等

   java中的集合,不管是List,Set,还是Map,都是继承自collection接口,这个接口主要定义了集合类的一些公关方法,比如isEmpty(), remove(),add()等,在使用集合类的时候除了顺序遍历,还提供了一种方便的迭代器遍历的方法,在遍历过程中需要remove元素的必须试用迭代器遍历(在删除元素时,集合内部的index会发生变化,使用顺序遍历可能会产生unindex的情况)。

      为了实现迭代遍历,定义了Iterable接口,collection接口继承了Iterable接口,以支持所有集合类实现迭代遍历。

1.List
1.1 ArrayList
ArrayList  是一个动态数组,以一个数组的格式进行存储,但是可以动态增长,继承自AbstractList,实现了List接口

ArrayList是一个非线程安全的类,使用时最好在一个线程中操作,构造函数可以提供一个数组的初始化大小,不提供默认按16来进行数组的初始化,往ArrayList增加元素时,都会先判断是否还有空间存在元素,如果没有空间,则会重新申请一个

(((以前长度*3)/2)+1)大小的数组空间,并将原来的元素全部copy到新的数组中,这样会带来效率上的损耗。建议在初始化时,能够确定存储空间的尽量提供合适的初始化数组大小,避免因为数组动态扩容带来的效率损耗。
1.2 Vector
Vector 基本上很少用到了,和ArrayList很相似,唯一的不同是Vector的方法都是线程安全的,而Array List是非线程安全的,从这点上来说,ArrayList的效率要比Vector的效率高,另外Vector是以2倍的方式扩展数组容量的

1.3 LinkedList
LinkedList 同时实现了List,Deque,所以也可以用来作为双向队列使用。LinkedList是以双向列表存储的,它是按照元素的先后顺序进行存储的,所以访问也是按照顺序来访问的。

2 Set  
 Set 继承了Collection,Set不保存重复的元素,存入Set里的元素都是唯一的,区分存入的元素是否重复是通过调用Equals方法来进行判断,所有存入Set中的元素类必须实现Equals方法
2.1 HashSet
Hash Set是讲存入Set中的元素以Hash链表的方式存储起来,所有元素存入Set中的位置通过调用hashCode方法获取hash值来决定,所以需要设计好的hashcode方法尽量将存入的值散列开有利于提升HashSet的访问效率。
2.3 TreeSet
TreeSet继承于AbstractSet,并且实现了NavigableSet接口
TreeSet实现了一个顺序访问的不重复元素的Set,底层使用红黑树进行数据的存储,来加快访问的速度
2.4 EnumSet
EnumSet只能用来存放Enum类型的数据,也不允许重复数据,性能是最好的
3 Map
Map和Set的区别是Set只有值,而Map是一个键值对<key,value>,Set不存重复的元素,Map中的key不能相同
3.1 HashMap
和HashSet相似,用hash链表来存储,讲键值对作为一个元素存储
3.3 TreeMap
基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值