Java-集合

2021年09月16日 阅读数:5
这篇文章主要向大家介绍Java-集合,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

1.集合概述

  1. 集合主要为了保存数量不肯定的数组以及具备映射关系的数据(关联数组)。
  2. 集合类主要为了保存、盛装其余数据,所以也被称为容器类。位于Java.util包下。
  3. 集合类和数组不同,数组元素既能够是基本类型的值,也能够是对象(实际上保存的是对象的引用变量),而集合里只能保存对象(实际上只是保存对象的引用变量,但一般习惯上认为集合里保存的是对象)。
  4. Java 集合类型分为 Collection 和 Map,它们是 Java 集合的根接口,这两个接口又包含了一些子接口或实现类。

Collection接口基本结构(黄色为接口,蓝色为实现类)
image算法

Map接口基本结构
image数组

集合接口及其做用:
image数据结构

集合实现类及其做用:
image性能

2.Collection接口

  1. Collection是List、Set和Queue的父接口,一般状况下不被直接使用。
  2. Collection接口定义了一些通用的方法,能够实现对集合的基本操做(Set,List和Queue)

Collection接口经常使用方法以下:
image线程

3.List集合(ArrayList与LinkedList)

  1. List为有序可重复集合,集合中每一个元素都有其对应的顺序索引。
  2. List集合默认按元素添加顺序设置元素的索引(第一个为0,第二个为1...)
  3. List实现Collection接口,主要有两个经常使用实现类:ArrayList与LinkedList

1-ArrayList类

ArrayList类实现了可变数组的大小,此外还提供了快速基于索引访问元素的方式,对尾部成员的增长和删除支持较好
向ArrayList中插入删除元素速度较慢。3d

构造方式

  1. ArrayList():构造一个初始容量为 10 的空列表。
  2. ArrayList(Collection<?extends E>c):构造一个包含指定 Collection 元素的列表,这些元素是按照该 Collection 的迭代器返回它们的顺序排列的。

经常使用方法

除Collection接口方法外还包括:
image对象

2-LinkedList类

LinkedList类采用链表接口保存对象,便于向集合中插入或者删除元素。插入删除元素效率高,但随机访问元素速度较慢(特定索引)。blog

构造方式同ArrayList,有两种排序

经常使用方法:

image

3-ArrayList与LinkedList区别

相同:

ArrayList与LinkedList都是List接口的实现类,都实现了List的全部未实现的方法索引

不一样:

  1. ArrayList基于动态数组数据结构的实现,访问速度优于LinkedList
  2. LinkedList基于链表数据结构的实现,占用内存空间较大,但在批量插入删除时优于ArrayList

4.Set集合(HashSet与TreeSet)

set实现collection接口,Set集合中的对象不按特定顺序排序且不能包含重复对象(只能有一个null)

1-HashSet

特色:

  1. HashSet按照HashSet算法存储集合中的元素,有很好的存取查找性能。
  2. 不能保证元素的排列顺序
  3. HashSet非同步,若多个线程需同时访问或修改一个HashSet需经过代码保证其同步。
  4. 集合元素值能够为null(只能有一个)

存取流程:

向HashSet集合存入一个元素时,HashSet会调用该对象的hashCode()方法来取获得该对象的hashCode值,而后根据该hashCode值决定该对象在HashSet中的存储位置。
如有两个元素经过equals()方法比较返回的结果为true,但它们的hashCode不相等,HashSet会将他们存储于不一样位置,依然能够添加成功。(Set中存的是引用而非值)

构造方法:

  1. HashSet():构造一个新的空的 Set 集合。
  2. HashSet(Collection<? extends E>c):构造一个包含指定 Collection 集合元素的新 Set 集合。其中,“< >”中的 extends 表示 HashSet 的父类,即指明该 Set 集合中存放的集合元素类型。c 表示其中的元素将被存放在此 Set 集合中。

2-TreeSet

TreeSet同时实现了Set与SortSet接口(SortSet为Set的子接口,能够实现对集合进行天然排序),所以使用TreeSet类实现Set接口默认状况下是天然排序的(升序)。
2) TreeSet只能对实现了Comparable接口的类进行排序(Comparable接口有一个compareTo(Object o)方法用于比较两个对象的大小)。

实现了Comparable接口的类以下:

image

TreeSet的经常使用方法:

image