Java 常用集合总结(详细)

本文详细介绍了Java集合框架中的核心内容,包括集合与数组的区别、集合分类、List接口(ArrayList和LinkedList的特性与使用)、Set接口(HashSet和TreeSet的特点)以及Map接口(HashMap、TreeMap和LinkedHashMap的区别)。同时,文章讨论了Collections和Arrays工具类的作用,列举了面试中常见的集合相关问题,帮助读者深入理解Java集合的使用和优化。
摘要由CSDN通过智能技术生成

一、集合和数组概念

在Java中,数组是存储某一类型的数据的容器,但是这个容器有局限性,因为定义后的数组长度不可变,超出长度后,再存放数据就会报错(例如:数组下标越界)。而且数组只能存放基本数据类型和对象

在开发过程中,大多时候数据长度是不确定的,这就需要有不定长的容器来存放数据,这就涉及到集合Collection,Java 中的集合Collection都采用了泛型实现,可以存入任何类型的对象数据,集合弥补了数组的缺点,比数组更灵活更实用,而且不同的集合框架类可适用不同场合。它以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性即可实现各种复杂操作,从而大大提高了软件的开发效率

二、集合分类

Java的集合类主要由两个接口派生而出: Collection和Map, Collection和Map是Java 集合框架的根接口,这两个接口又包含了一些子接口或实现类。

Java集合框架是一个用来代表和操纵集合的统一架构,包含如下内容:

接口:代表集合的抽象数据类型。例如: Collection、List、Set、Map 等。定义多个接口,便于以不同的方式操作集合对象

实现(类):接口的具体实现。例如:ArrayList、LinkedList、HashSet、HashMap。

算法:实现接口的对象里的方法中执行的计算,例如:Collections 工具类提供了对集合进行排序,遍历等多种算法实现。

Collection接口下有三个子接口,List,Queue,Set及最常用的三个类,ArrayList,LinkedList,HashSet。

Map接口下最常用的是HashMap。

1、Collection接口

Collection 是最基本的集合接口,是单列集合的顶层父类,一个独立元素的序列。一个 Collection 代表一组 Object,即 Collection 的元素, Java不提供直接继承自Collection的类,只提供继承于的子接口(如List和set)。Collection 接口存储一组不唯一,无序的对象。

  1)List集合是一个有序的队列,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,允许有相同的元素。List 接口存储一组不唯一,有序(插入顺序)的对象。

        List的实现类有LinkedList、ArrayList、Vector、Stack。

 2)Set集合是一个不允许有重复元素的集合。存储一组唯一,无序的对象。

       Set的实现类有HashSet、TreeSet。

       HashSet依赖于HashMap,他实际上是通过HashMap实现的;

       TreeSet依赖 于TreeMap,他实际是通过TreeMap实现的。
 

 2、Map接口

是双列集合的顶层父类接口,是一个映射接口,即key-Value键值对。允许使用键来查找对应的值,从某种意义上来说,他将数字和对象关联在一起。Map中的每一个元素包含"key"和"key对应的value"。

 1)Map.Entry:描述在一个Map中的一个元素(键/值对)。是一个Map的内部类。

Entry将键值对的对应关系封装成了对象。
即键值对对象,在遍历Map集合时,可以从每一个键值对(Entry)对象中获取对应的键与对应的值。
相关方法
getKey()方法:获取Entry对象中的键
getValue()方法:获取Entry对象中的值
entrySet()方法:用于返回Map集合中所有的键值对(Entry)对象,以Set集合形式返回。

 2)Map的实现类有:HashMap ,TreeMap。LinkedHashMap 继承自 HashMap 。

3、迭代器Iterator

 1)Iterator通常被称为轻量级对象,创建它的代价很小,它是遍历集合的工具,通常通过Iterator迭代器来遍历集合。Collection依赖于Iterator,Collection的实现类都要实现iterator()函数,返回一个Iterator对象。

三、List接口

  • ArrayList介绍

ArrayList是一个数组队列,也是一个动态数组,底层是Object数组,容量是自增长的,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点。它继承与AbstractList。

ArrayList线程是非安全的,一般使用在单线程的情况下。要保证同步,可以使用:List list = Collections.synchronizedList(new ArrayList());进行包装,默认容量为10.

ArrayList可以有null值

ArrayList集合特点:底层采用的是数组结构

ArrayList al=new ArrayList();//创建了一个长度为0的Object类型数组
 al.add("abc");//底层会创建一个长度为10的Object数组 Object[] obj=new Object[10]
               //obj[0]="abc"
              //如果添加的元素的超过10个,底层会开辟一个1.5*10的长度的新数组
              //把原数组中的元素拷贝到新数组,再把最后一个元素添加到新数组中
 原数组:
 a b c d e f g h k l
 添加m:
 a b c d e f g h k l m null null null null

常用方法:add,addAll,remove,indexOf,subList,contains,isEmpty

  •  LinkedList介绍

LinkedList 是一个继承于AbstractSequentialList的双向链表。实现了List、Deque、Cloneable、Java.io.serializable接口,它也可以被当作堆栈、队列或双端队列进行操作,。 
LinkedList 是非线程安全的,集合中的元素允许为空,保存的元素为有序的,实现了List接口,则允许集合中的元素是可以重复的。经常用在增删操作较多而查询操作很少的情况下。

1)LinkedList中定义了两个属性

size:LinkedList对象中存储的元素个数。 
header:LinkedList是基于链表实现的&#

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值