【无标题】

1. Set

1.1 HashSet使用

add(); 添加

remove(); 删除

size(); 元素个数

isEmpty(); 判断是否为空

for(Object object:set){} 遍历

2.散列表

2.1概述

散列表(也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

散列表结构 可以理解为 数组中保存的是链表的首节点,用来保存k和v键值对操作
  
 hash算法 : 是一种安全的加密机制,可以把不定长的数据转换为定长数据,并且不能保证其唯一性,又叫哈希冲突

在java中 指的就是hashCode方法
  
  对一个对象生成多次hash值 , 值一定相同 , 多个对象也可能生成相同的hash值,叫哈希冲突
  
  k不可重复 , v 可重复 
 
 添加过程 : 
 1 根据要添加的key,调用的它的hashCode方法,生成hash值
 2 通过一定的算法,根据hash值生成数组的下标
 3 判断该下标中,是否有数据,如果没有数据就把该键值对映射关系保存到数组中
 4 如果该下标中,有数据,则调用key的equals方法,和对应的所有数据进行比较,如果不相等,则添加到链表的尾部即可
 5 如果对应的链表中,通过equals方法比较的时候,发现了相同的数据,那么 key不再添加 ,但是value值会替换原来的value值
 
 通过添加过程得知,会自动调用该对象的hashCode和equals,所以在保存自定义类型的时候,需要注意方法覆写

 在java中 没有散列表的概念,把散列表封装为了HashMap和HashTable

2.2HashSet

使用HashSet的时候,其实就等于是再使用HashMap

添加数据的时候,虽然调用的是HashSet的add方法,但是本质还是调用map的put方法

而 map中 需要保存的是k和v映射关系,所以在set中有一个变量保存了value的值

所以再进行set添加的时候,只操作了map中的key,value值不用管

3. Map

Map是无序的,并且保存的是K-V键值对映射关系,其中K不能重复,V可重复

HashMap : 底层是散列表
  
TreeMap : 底层是红黑树,元素必须按照一定的规则进行排序
  
映射关系 : 比如 商品 和 购买数量 , 或者数据统计

3.2继承体系

 3.3使用

map.put("A","one");  添加

mao.put("B","two");

map.put("A","three"); key重复,不添加,value替换

map.put(null,nill);    支持V和K都是null,但是没意义

map.size();  个数

map.get("B");  two   根据K获取V的值

map.containsKey(key);     判断是否包含key

map.containsValue(value);      判断是否包含value这个值  

map.remove(key);         根据key删除对应的value

Collection values = map.values();  获取所有的value,并放到集合中返回

Set keys = map.keySet();

for (Object object : keys){}        获取所有的key,封装到set对象中并返回

Set set  = map.entrySet();  把map转换为set,Entry类中,保存了K和V两个变量,把map中的k和v                                                转换为entry类的对象进行存储,保存entry对象,就等于保存了k和v

3.4TreeMap

TreeMap保存的元素会按照一定规则进行排序,底层是红黑树

4.泛型

4.1概述

在编译过程中检测数据类型是否匹配

泛型必须是引用类型,不能使用基本类型

优点:统一了数据类型,减少了类型转换

缺点:只能保存同一种类型

4.2使用方式

泛型不拿写基本类型,只能写引用类型,如果想要保存基本类型,则需要编写对应的包装类类型

List<A> list=new ArryList<A>();   只能保存A类型

4.3自定义泛型

class MyClass<T>{}    T是占位符

MyClss<String> x=new MyClss<String>();  指定类型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值