loading...
集合的基本概念
Published in:2022-01-31 | category: JavaSE基础知识
Words: 1.4k | Reading time: 5min | reading:

集合

概念

对象的容器,定义了对多个对象进行操作的常用方法。可


实现数组的功能

和数组的区别

  • 数组长度固定,集合长度不固定
  • 数组可以存储基本类型和引用类型,集合只能存储引用类型

在这里插入图片描述

Collection体系集合

Collection父接口(方法)

  • 特点:代表一组任意类型的对象,无序,无下标
  • 方法:
1
2
3
4
5
6
7
8
9
10
boolean add(Object obj); //添加一个对象
boolean addAll(Collection c); //将一个集合中的所有对象添加到此集合中
void clear(); //清空此集合中的所有对象
boolean contains(Object o); //检查刺激和中是否包含o对象
boolean equals(Object o); //比较此集合是否与指定对象相等
boolean isEmpty(); //判断此集合是否为空
boolean remove(Object o); //在此集合中移除o对象
int size(); //返回此集合中元素的个数
Object[] toArray(); //将此集合转换成数组

针对Collection集合进行操作的工具类

1
2
3
4
5
6
public static <T> int binarySearch(List<?> list,T key)://针对集合的二分查询方法:查询key在集合中出现的索引值
public static <T> T max(Collection<? extends T> list)://获取集合中最大值
public static <T> T min(Collection<? extends T> list)://获取集合中最小值
public static <T> void sort(List<T> list)://针对List集合进行排序:升序排序
public static <T> void sort(List<T> list,Comparator<T> com)://比较器排序
public static void shuffle(List<?> list)://针对List集合的元素进行随机置换

List集合

特点

  • 有序、有下标、元素可以重复

ArrayList

  • 一个List接口的实现类叫做ArrayList,类似于数组,但是长度空间可以动态变化
  • 集合对象在内存中是可以不连续存放的,只能存放引用类型的数据对象
  • ArrayList里面可以存放null值,元素可以重复
  • 其父类叫做AbstractList

也是一个List接口的实现类,底层的数据结构是链接列表

方法

1
2
3
4
void add(int index , Object o); //在index位置插入对象o
boolean addAll(int index , Collection o); //将一个集合中的元素添加到index位置
Object get(int index); //返回集合中指定位置的元素
List subList(int fromIndex , int tolndex); //返回fromIndex和toIndex之间的元素

Set集合

特点:不可重复的“无序”集合

HashSet

重写equals和hashCode方法来实现去重

TreeSet

本质

本质基于TreeMap的底层实现(红黑树结构 ———> 自平衡的“二叉树结构”)

由于TreeSet属于Set集合(本身保证元素唯一,不重复的元素),还可以将元素按照自然顺序排序

TreeSet排序的方式

有两种排序方式:

  • 自然排序public TreeSet<T>() : //默认的自然顺序排序
  • 选择器排序 publlic TreeSet<T>(Comparator<T> com) : //自己定义的选择器排序,Comparator类中必须实现Comparable接口以及里面的compareTo方法以及实现排序

排序方式的选择取决于创建当前Set集合对象的时候的构造方法。

Map集合

java.util.Map<K,V>:接口

特点

  • 双列集合
  • 一个键值对元素(一个键对应一个值,值可以重复,但键必须唯一,两者均可以为null),只针对键有效,跟值无关
  • 遍历方式与Collection集合遍历方式不同

map的put()方法完成数据的插入,返回值为上次key对应的value值,第一次添加该key,则返回为null.

但是对于返回为null的情况有两种:

  • 一种是第一次添加该key
  • 一种是该key上次本身的值就是null

Map集合的功能

添加功能

put(K key , V value)``` : 添加一个键值对元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

> 问题: 返回值是什么意思?
>
> 如果当前键是第一次存储的时候,返回的结果为null
>
> 如果当前键不是第一次存储,后面重复,将当前对应的值把以前的值覆盖掉并返回以前的值

### 删除功能

````java
V remove (Object key) ; //删除指定的键,返回的是跟键关联的值,如果没有映射关系

void clear() ; //删除全部的键以及值
````

### 判断功能

````java
boolean containsKey(Object Key) : //判断集合中是否包含该键
boolean containsValue(Object value): //是否包含指定的值

boolean isEmpty(): //判断Map集合是否为空
````

### 高级功能

````java
set<K> keySet(); //获取所有的键的集合
V get(Object key); //通过键获取对应的值

Set<Map.Entry< K , V >> entrySet(); //获取当前Map集合中所有的键值对对象
````

## HashMap

HashMap< K , V > 是Map集合的子实现类,里面为哈希表结构,保证键值唯一

Map集合只针对键有效

```java
HashMap<Integer,String> //键:Integer
HashMap<String,Student> //键:String
HashMap<Student,String> //键:Student

自定义的对象存储在值的位置,是可以重复的!如果是在键的位置,不能重复

HashMap中的去重问题

对于Map存储的键如果是自定义对象:该自定义对象的所在类必须重写hashCode()和equals()方法,会依赖于HashMap的put方法

hash() —->依赖于hashCode():算出每个对象哈希码值

putValue() —->equals()方法:哈希码值一样,还有比较每一个成员信息是否相同

TreeMap

TreeMap的底层是红黑树结构,它在创建对象时会进行排序,它的排序方式有两种:

  1. public TreeMap():默认的自然排序
  2. public TreeMap(Comparator<? super K> comparator):是一种比较器排序(推荐)
Prev:
面向对象程序设计
Next:
数组的基本概念
catalog
catalog