java集合

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单继承的不足。

带开环升压转换器和逆变器的太阳能光伏系统 太阳能光伏系统驱动开环升压转换器和SPWM逆变器提供波形稳定、设计简单的交流电的模型 Simulink模型展示了一个完整的基于太阳能光伏的直流到交流电力转换系统,该系统由简单、透明、易于理解的模块构建而成。该系统从配置为提供真实直流输出电压的光伏阵列开始,然后由开环DC-DC升压转换器进行处理。升压转换器将光伏电压提高到适合为单相全桥逆变器供电的稳定直流链路电平。 逆变器使用正弦PWM(SPWM)开关来产生干净的交流输出波形,使该模型成为研究直流-交流转换基本操作的理想选择。该设计避免了闭环和MPPT的复杂性,使用户能够专注于光伏接口、升压转换和逆变器开关的核心概念。 此模型包含的主要功能: •太阳能光伏阵列在标准条件下产生~200V电压 •具有固定占空比操作的开环升压转换器 •直流链路电容器,用于平滑和稳定转换器输出 •单相全桥SPWM逆变器 •交流负载,用于观察实际输出行为 •显示光伏电压、升压输出、直流链路电压、逆变器交流波形和负载电流的组织良好的范围 •完全可编辑的结构,适合分析、实验和扩展 该模型旨在为太阳能直流-交流转换提供一个干净高效的仿真框架。布局简单明了,允许用户快速了解信号流,检查各个阶段,并根据需要修改参数。 系统架构有意保持模块化,因此可以轻松扩展,例如通过添加MPPT、动态负载行为、闭环升压控制或并网逆变器概念。该模型为进一步开发或整合到更大的可再生能源模拟中奠定了坚实的基础。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值