java集合

java集合首先可以分为List、Set、Map这三种体系
Set:无序、不可重复的集合
List:有序、重复的集合
Map:代表具有映射关系的集合
注:java5以后又出现了queue体系集合,代表一种队列集合实现
**集合和数组的区别:**数组的元素可以是基本数据类型的值也可以是对象,而集合里只能保存对象
1.Iterator遍历元素:
a)boolean hashNext():如果被迭代的集合元素还没有被遍历,则返回true
b)Object next():返回集合里的下一个元素
c)void remove():删除集合里上一次next()方法返回的元素
一、HashSet
1.HashSet特点:
a)不能保证元素的排列顺序
b)HashSet是不同步的,如果多个线程同时访问一个HashSet,必须要保证同步
c)集合元素值可以是null
2.HashSet用hashCode和equals方法来判断两个对象是不是同一个对象
hash算法是根据元素的值来计算出该元素的存储位置,而HashSet是通过每个元素的hashcode值来计算索引,从而可以自由增加HashSet的长度,并且可以根据元素的哈市Code值来访问元素,实际上HashSet是HashMap的一个实现类HashSet中的元素都存放在HashMap的key上面。
3.HashSet的底层实现
HashSet实际上是建立在Hashmap的基础上,默认构造函数是构建一个初始容量为16,负载因子为0.75 的HashMap。封装了一个 HashMap 对象来存储所有的集合元素,所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存,而 HashMap 的 value 则存储了一个 present,它是一个静态的 Object 对象。
二、ArrayList和Vector
Arraylist 和Vector都是基于数组实现的List类,所以ArrayList和Vector类封装了一个动态的允许再分配的Object[]数组,他们使用了initialCapacity参数来设置该数组的长度,当向Array List或Vector中添加了元素超出了该数组的长度时,他们的initialCapability会自动增加
①二者的区别:ArrayList是线程不安全的,Vector是线程安全的,所以Vector比ArrayList的性能较低
②怎样将ArrayList变成一个线程安全的集合

```
   Collection c=Collections.synchronizedCollection(new ArrayList<>());
   List list=Collections.synchronizedList(new ArrayList<>());
   Set s = Collections.synchronizedSet(new HashSet());
   Map m=Collections.synchronizedMap(new HashMap<>());

``

③Vector还提供了一个stack类
④固定长度的List:Array.ArrayList(不允许增加、删除该集合里的元素)
⑤LinkedList:是List接口的实现类,也实现了Deque接口
三、Queue集合:用于模拟队列的这种数据结构
注:boolean offer(Object e):将指定元素加入此队列的尾部,当使用有容量限制的队列时。此方法通常比add(Object e)方法更好
a)priorityQueue:(Queue的一个实现类)
可以将队列中的元素从大到小排序
不允许插入null元素
两种排序方式:采用自然排序(需要实现Comparable接口),必须是同一个类的实现类
定制排序:传入一个Comparator对象
b)Deque接口(是Queue的一个接口)
代表了一个双端队列,允许从两端来操作队列的元素
ArrayDeque(Deque的实现类):基于数组实现的双端队列

各种线性表的性能分析
四、Map接口的两个典型的实现类HashMap和Hashtable
1.二者典型的区别:
①Hashtable是一个线程安全Map实现,但Hashmap是线程不安全的
②Hashtable不允许使用null作为key或value,如果放进去就会引发NullPointerException异常;但HashMap允许使用null作为key或者value
2.共同点:与Hashset一样不能保证元素的顺序一样
3.LinkedHashMap是HashMap的子类:可以保证元素的存取一致
4.EnumMap:key都必须是单个枚举类的枚举值
五、Map接口的子接口------>SortedMap-------->(实现类)TreeMap(红黑树结构)
TreeMap可以保证key-value处于有序状态(自然排序、定制排序)
Treemap判断key相同的标准是:compareTo()方法返回0,则TreeMap认为这两个key相同
注:什么是强引用:例如HashMap中,只要HashMap对象不被销毁,那么key所引用的对象就不会被垃圾回收
六、HashMap的数据结构:由数组和链表组成的,数据结构i又叫“链表-----散列”
1.HashMap的特点
①快速存储
②快速查找
③可伸缩:单线列表如果长度超过8的话会变成红黑树
2.hashmap 的hash算法
在java中所有的对象都有hashcode(使用key)如果使用Object对象get hashcode的话会得到一个int类型的值,我们在计算时,主要是用他的key去计算他的值
3.hash值的计算(hashcode)^(hashcode>>>16)
4.数组下标=hash%16;
5.哈希冲突会产生单线链表
6.hashmap的底层扩容原理:扩容(数组长度变成2倍)
触发条件:数组存储达到了75%
七、接口和抽象类的区别:
1.接口里只能包含抽象方法,不包含已经提供实现的方法,抽象类则完全可以包含普通ff
2.接口里不能定义静态方法,抽象类里可以定义静态方法
3.接口里只能定义静态类常量Filed,不能定义普通Filed,抽象类静态,普通均可
4.接口里不能包含构造器,抽象类可以包含构造器
5.接口里不能有初始化块;但抽象类则完全可以包含初始化块
6.一个类最多只能有一个直接父类、包含抽象类,但是一个类可以实现多个接口,弥补了java单继承的不足。

关于 阿里云盘CLI。仿 Linux shell 文件处理命令的阿里云盘命令行客户端,支持JavaScript插件,支持同步备份功能,支持相册批量下载。 特色 多平台支持, 支持 Windows, macOS, linux(x86/x64/arm), android, iOS 等 阿里云盘多用户支持 支持备份盘,资源库无缝切换 下载网盘内文件, 支持多个文件或目录下载, 支持断点续传和单文件并行下载。支持软链接(符号链接)文件。 上传本地文件, 支持多个文件或目录上传,支持排除指定文件夹/文件(正则表达式)功能。支持软链接(符号链接)文件。 同步备份功能支持备份本地文件到云盘,备份云盘文件到本地,双向同步备份保持本地文件和网盘文件同步。常用于嵌入式或者NAS等设备,支持docker镜像部署。 命令和文件路径输入支持Tab键自动补全,路径支持通配符匹配模式 支持JavaScript插件,你可以按照自己的需要定制上传/下载中关键步骤的行为,最大程度满足自己的个性化需求 支持共享相册的相关操作,支持批量下载相册所有普通照片、实况照片文件到本地 支持多用户联合下载功能,对下载速度有极致追求的用户可以尝试使用该选项。详情请查看文档多用户联合下载 如果大家有打算开通阿里云盘VIP会员,可以使用阿里云盘APP扫描下面的优惠推荐码进行开通。 注意:您需要开通【三方应用权益包】,这样使用本程序下载才能加速,否则下载无法提速。 Windows不第二步打开aliyunpan命令行程序,任何云盘命令都有类似如下日志输出 如何登出和下线客户端 阿里云盘单账户最多只允许同时登录 10 台设备 当出现这个提示:你账号已超出最大登录设备数量,请先下线一台设备,然后重启本应用,才可以继续使用 说明你的账号登录客户端已经超过数量,你需要先登出其他客户端才能继续使用,如下所示
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值