13、集合

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_45536396/article/details/102736184

集合

一、集合的概念

1. 概念:集合是一个容器,集合是一个工具,用来存放数量不等的对象。

2. 分类(Collection)

[

3. 集合的学习展开的方面

a. 集合的特点

b. 集合中常用的方法

c. 集合的实现类

d. 集合的遍历

二、Collection集合

1. 特点:可以存储任意类型的对象。java.util包下

2. Collection集合中常用的方法

a) boolean add(Object o):在集合中添加o对象。 *

b) boolean addAll(Collection c): 在指定集合中添加c集合中所有的元素。

c) void clear() : 移除集合中所有的元素 *

d) boolean contains(Object o):返回此集合中是否包含指定对象o,存在

返回true,反之返回false *

e) boolean containsAll(Collection c):返回此集合中是否包含指定回合c

中所有的元素,包含则返回true,否则返回false

f) boolean isEmpty(): 判断此集合的长度是否为0,如果长度为0返回

true,否则返回false

g) boolean remove(Object o):移除集合中指定的元素,删除成功返回

true,否则返回false *

h) boolean removeAll(Collection c): 移除集合中包含在c集合中所有元素

i) int size():返回集合的长度 *

j) Object[] toArray(): 将集合转换成包含所有元素的数组

3. Collection集合没有实现类

4. Collection集合的遍历方式: 参考子集合中的遍历方法

三、List集合

1. 特点:可以存储任意类型的对象;有序,有下标,元素可以重复。***

2. List集合中的常用方法

Collection接口中方法List都能继承到

a) void add(int index,Object o):在集合的指定位置index处添加元素o ***

b) boolean addAll(int index,Collection c): 将集合c所有元素在指定集合的指定位

置处添加

c) Object get(int index):获取指定下标index的元素 *

d) int indexOf(Object o):返回Object在指定集合第一次出现的下标,如果不存

在则返回-1. *

e) int lastIndexOf(Object o):返回Object在指定集合第一次出现的下标,如果不

存在则返回-1.

f) Object remove(int index):移除指定位置的元素,返回被移除的元素。 *

g) Object set(int index,Object o):将指定位置的元素替换成o,返回被替换的元素

h) List subList(int fromIndex,int toIndex):返回指定区间元素保存在List集合

中,包含fromIndex,不包含toIndex *

3. List接口的实现类:ArrayList

4. List集合的遍历

逐一对集合中的元素进行访问的过程称之为集合遍历

a) 下标遍历

在这里插入图片描述

b) forEach遍历

语法: for(集合中保存的数据类型 对象名 : 需要遍历的集合)
在这里插入图片描述

5. List集合的其他实现类

a) ArrayList:数组实现 查询快 增删慢 JDK1.2版本 线程不安全 效率高

b) Vector:数组实现 JDK1.0版本 线程安全 效率低

c) LinkedList :链表实现 查询慢 增删快

四、泛型

1. 概念: 类型安全的集合。

2. 使用: 集合类型<泛型类型> 集合名 = new 集合类型<泛型类型>();

一旦加上泛型之后,那么集合中只能存放泛型对应的类型的元素。

3. 特点

a) 类型安全的集合,限制了集合中元素的类型

b) 编译时会报错,而非运行时报错

c) 不需要做强制类型转型

d) 泛型不存在多态

4. 泛型类

a) 定义

class 类名<泛型标识符>{

泛型标识符 t;

public 泛型标识符 方法名(泛型标识符 参数名){

}

}

注意:泛型标识符:T V E

b) 创建对象

类名<泛型类型> 对象名 = new 类名<泛型类型>();

5. 泛型接口

a) 定义

interface 接口名<泛型标识符>{

泛型标识符 方法名(泛型标识符 参数名);

}

b) 实现类实现方法

1. 泛型接口实现的方式1

class 类名<泛型类型> implements 接口名<泛型类型>{

public 泛型类型 方法名(泛型类型 参数名){}

}

2. 泛型接口的实现方式2

class 类名<泛型标识符> implements 接口名<泛型标识符>{

public 泛型标识符 方法名(泛型标识符 参数名){}

}

c) 创建对象

类名<泛型类型> 对象名 = new 类名<泛型类型>();

五、Collections工具类

常用方法

1. static void reverse(List list):对集合中的元素进行倒置(反转)

2. static void shuffle(List list): 对集合中的元素进行随机排列

3. static void sort(List list): 对集合中的元素进行排序

六、Set集合

1. 特点:可以存储任意类型的对象;无序,无下标,元素内容不可以重复。

2. set集合中的常用方法

来源于Collection父接口中的方法

3. Set集合的实现类: HashSet

4. Set集合的遍历

forEach遍历

5. HashSet是如何保证元素内容不可重复【重点】

当需要将一个元素插入到Set集合中,首先会调用对象的hashCode()返回的是对象的哈希码值,然后通过一定的换算将其转换成一个从0到添加元素的个数-1的数字,然后将其存放在该数字处;当第二次添加元素的时候同样会调用对象的hashCode(),同样转换成一个数字,如果这个数字和前面的数字相同,则会调用equals()进行比较两个对象的内容是否一致,如果一致则代表元素内容重复则不会添加到Set集合中;如果不一致则会放置在上一个元素的后面。

a) 覆盖hashCode()方法

目的:保证相同对象返回相同的哈希码值,不同对象尽可能返回不同的哈希码值。

b) 覆盖equals()

目的:保证相同内容的对象不会插入到set集合中

在这里插入图片描述

6. Set集合其他的实现类【面试】

a) LinkedHashSet:HashSet的子类 能够维持添加到Set集合的顺序

实现元素内容不可重复的方式同HashSet

b) TreeSet:SortedSet(Set的子接口)的实现类 自动对添加到Set集合的元素进行排序。是通过实现Comparable接口,覆盖compareTo方法实现元素内容不可重复。

七、Map集合

1. Map集合的特点【重点】

a) 由任意的键值对(key-value)组成

b) 键(key):无序,无下标,元素不可以重复

c) 值(value):无序,无下标,元素可以重复

如:英汉词典
单词(key) 注释(value)
hi 你好
hello 你好
you 你

2. Map集合中常见方法【重点】

a) put(Key key,Value v):根据key插入key-value,返回值

如果此key不存在则添加新的key-value,反之则将原值覆盖

b) remove(Object key):根据key移除key-value 返回值为值

c) int size():返回map集合的长度

d) get(Object key):根据key获取value 如果不存在返回null

f) boolean containsKey(Object key):是否包含此key

c) boolean containsValue(Object value):是否包含此value

3. Map集合的实现类:HashMap【重点】

4. Map集合的遍历(实际开发)

a) 键遍历

思想:将所有的key看做一个整体,因为key是无序,无下标,元素内容不可以重复,是一个Set集合,通过keySet()返回的就是一个Set集合,再去遍历Set集合获取所有key,然后通过get(key)获取所有的value。

在这里插入图片描述

b) 值遍历

思想:将所有的值看做一个整体,通过values()返回的是一个由value组成的Collection集合,遍历Collection集合能够获取所有的value。

在这里插入图片描述

c) 键值对遍历

思想:将一个的键值对看做一个整体,是一个Map.Entry对象,由于key:无序,无下标,元素不可以重复,value:无序,无下标,元素可以重复,将所有的Map.Entry对象看做一个整体,其特点为无序,无下标,元素不可以重复,是一个Set集合。通过entrySet返回的就是一个所有的Map.Entry对象组成的Set集合。再遍历Set集合获取每一个Map.Entry对象,再通过Map.Entry中的getKey()和getValue()分别获取Map.Entry对象的key和value

在这里插入图片描述

5. Map集合的其他实现类(面试)

a) HashMap:JDK1.2 线程不安全 效率高 可以使用null作为key|value的值

b) Hashtable:JDK1.0 线程安全 效率低 不能使用null作为key|value的值

c) Properties:JDK1.0 Hashtable的子类 key:String value:String

一般用于配置文件的读取

d) LinkedHashMap:可以维持添加到Map集合的顺序

e) TreeMap:SortedMap(Map的子接口)的实现类 自动对添加到Map集合的key进行

排序。

一般用于配置文件的读取

d) LinkedHashMap:可以维持添加到Map集合的顺序

e) TreeMap:SortedMap(Map的子接口)的实现类 自动对添加到Map集合的key进行

排序。

猜你喜欢

转载自blog.csdn.net/weixin_45536396/article/details/102736184