泛型、Set、HashSet、LinkedHashSet、Map、Collections工具类

一、泛型

(一)泛型接口

1.带泛型的接口

2.定义格式

interface 接口名<泛型1, 泛型2, 泛型3...> {}

3.说明

(1)在接口的声明上,定义好泛型,整个接口中都可以将接口的泛型拿来使用

(2)泛型接口被其他实现

①类实现接口时,泛型确定为了具体的类型

class 类名 implements 接口名<具体类型> { 实现接口的方法,方法使用泛型,也都成了具体的泛

型; }

②类实现接口时,泛型依然不确定,类也有自己的泛型

class 类名<泛型1, 泛型2, 泛型3...> implements 接口名 <泛型1, 泛型2, 泛型3...>{ 实现接口的方

法,方法使用泛型依然不确定; }

(二)泛型的通配符

1.符号:?

2.使用泛型时,没有使用具体的泛型声明T,而是使用了和T有关的类型,如果表示和T有关的类型

就需要使用通配符

3.第一种:使用?来表示任意类型

就是表示可以接收任意类型泛型的集合,参数集合的泛型可以和调用者集合的泛型没有任何关系

4.第二种:?extends E

确定泛型的上边界:参数泛型是调用者泛型的本类或子类,不能是父类,也不能是无关类

5.第三种:?super E

确定下边界:表示泛型是E的父类或E本身,不能是E的子类,也不能是无关类

二、Set

(一)概述

1.是Collection的子接口

2.特点:不可重复,原因就是没有索引

3.实现类

(1)HashSet,底层哈希表

(2)LinkedHashSet,底层是哈希表+链表

(二)Set集合的遍历

1.没有自己特有的方法使用Collection中的方法来遍历集合

2.第一种:toArray();转数组,遍历数组

3.第二种:Iterator();迭代器,迭代器遍历

4.第三种:toArray(T[] a);转数组,准备好跟集合相同数据类型的数组,如果数组长度小于集

合,新建数组进行存储;如果数组长度大于或等于集合,直接存储多余的位置使用默认值填充

5.第四种:增强for循环(底层也是迭代器)

for(元素的数据类型 元素名称 : 要遍历的集合或者数组) { 使用元素名称操作元素; }

三、HashSet

(一)概述

1.是Set集合的实现类

2.特点

(1)不可重复

(2)无序

(二)HashSet去重原理

1.重写hashCode方法:让不同的对象具有相同的哈希码值,不同的对象尽量要有不同的哈希码值

2.重写equals方法:通过属性值来区分不同的对象

(三)原理总结

1.某个对象obj,即将要存储在HashSet集合中的时候,首先要计算对象的哈希码值

2.在集合中所有元素的哈希码值,都和obj类型不同,就直接将obj对象进行存储

3.如果集合中存在元素和obj对象的哈希码值相同,并不能说明obj对象就在集合中存在

4.会进而调用equals方法判断obj对象的属性值是否相同

5.如果不相同,直接存储,如果相同,直接覆盖

四、LinkedHashSet

1.是HashSet的子类

2.特点

(1)有序:存储顺序和读取顺序保持一致

(2)不可重复

五、Map

(一)概述

1.体系位置:双列集合的顶层接口

2.类比理解:单词含义:地图,在地图上的每一个点,都表示生活中的一个具体的位置,地图的点

和生活中的位置有着一一对应的关系,这种关系是通过罗列的形式展现出来的

3.数据结构:描述的是一个数据(key)到另一个数据(Value)的映射关系

(1)Key(键):有规律的,不可重复的,容易记忆的

(2)Value(值):没有规律的,不容易记忆的,可以允许重复

(3)操作:通过Key来寻找Value,一个Key只能对应一个Value

4.HashSet就是HashMap中键的那一列

(二)常用方法

1、put(K key, V value):添加功能(当集合中不存在指定键时),将键值对添加到指定集合中;修

改功能(当集合中已经存在指定键),根据键修改值

2、remove(Object key):根据键,删除键值对;如果键不存在,则不操作;如果键存在,删除键

值对并返回键对应的值

3、clear():清空集合

4、size():返回集合中键值对个数

5、get(Object key):根据键获取对应值,如果键不存在,则返回null

6、containsKey(Object key):判断集合中是否存在指定键

7、containsValue(Object value):判断集合中是否存在指定值

(三)第一种遍历

1.获取Map集合中所有的键,存储到一个Set集合中,之后遍历Set集合,根据键获取值

2.获取Map中键的方法:keySet()

3.遍历Set集合

(1)迭代器遍历

(2)增强for循环遍历

4.根据键获取值的方法:get(Object key)

(四)第二种遍历

1.获取Map集合中所有的键值对对象(Entry),存储在一个Set集合中,遍历Set集合,拿到每一个

键值对对象,根据键值对对象提供的方法进一步去获取键、获取值

2.遍历Set集合,获取每一个键值对对象:迭代器、增强for循环的方式遍历

3.获取键值对对象的方法:entrySet();返回值类型:Set<Map.Entry<K,V>>

4.得到键值对对象之后获取键值

(1)获取键:getKey()

(2)获取值:getValue()

(五)HashMap和Hashtable的区别

1.相同点:都是Map接口的实现类,都是双列集合,底层都是哈希表

2.不同点:

(1)HashMap不安全,Hashtable安全

(2)HashMap效率高,Hashtable效率低

(3)HashMap允许存储null值null键,Hashtable不允许

(4)HashMap初始容量为16,Hashtable初始容量为11

(5)HashMap扩容时扩容为原来的2倍,Hashtable扩容为原来的2倍+1

(6)HashMap会重写计算hash码值,Hashtable会直接使用hashCode

(7)HashMap出现在JDK1.2,Hashtable出现在JDK1.0

六、Collections工具类

1、sort(List list):对集合中的元素进行升序排序

2、binarySearch(Collection list, T key):在指定的集合中搜索指定元素,如果查找到就返回元素索

引,否则返回-1,注意在使用该方法之前必须对集合进行排序

3、frequency(Collection c, Object o):返回一个指定元素o在指定集合中出现的次数

4、replaceAll(List list, T oldVal, T newVal):使用一个值,在指定集合中替换另一个值

5、reverse(List list):反转List集合元素顺序

6、max、min:获取集合中的最大值或者最小值

7、shuffle(List list):随机打乱集合中的元素顺序

8、swap(List list, int i, int j):交换指定集合中指定两元素的位置

9、unmodifiableList(List list):返回一个集合的副本,但是副本不能进行修改【List、 Set、Map】

10、synchronizedList(List list):返回一个参数集合的线程安全的集合【List、Set、Map】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值