集合

本文深入探讨了C#和Java中的集合概念,包括List、ArrayList、Hashtable、Dictionary以及Java特有的Collection、List、Set、Map等接口和其实现类的详细解析。

集合

一、C#集合

以前讲过C#的集合,今天就简单的过一遍就好,重点不是在C#的集合而是Java的集合。

1、List和ArrayList

List和ArrayList的存储方式类似数组。

1、List :是泛型,限制数据类型;

语法:List<数据类型> list = new List<数据类型>();

2、ArrayList:是非泛型,不限制数据类型

语法:ArrayList array = new ArrayList();

2、Hashtable和Dictionary

Hashtable和Dictionary的存储方式是键对值得存储

1、Dictionary是泛型,泛型限制数据类型;

语法:Dictionary<key的数据类型,value的数据类型> dic = new Dictionary<key的数据类型,value的数据类型>();

2、Hashtable是非泛型,是不限制数据类型的;

语法:Hashtable hash = new Hashtable();

二、Java集合

1、相关类

1、Collection接口:

Collection接口存储一组不唯一(允许重复),无序的对象。

Collection是List和Set的父类,Collection是接口(interface);

2、Collections类:

Collections和Collection很像,但是它们不是一样的,Collections是Java提供的进行集合操作的工具类,Collections提供了对集合进行排序等多种算法实现。

3、Iterator接口:

这个接口是专门用来迭代(变量)集合的。

4、关系:

Collection是List和Set的父类,都是接口;

Map和Collection没有关系;

工具类:Collections;

迭代遍历:Iterator。

2、List

List在Java中是接口,List接口继承Collection接口,存储一组不唯一(允许重复)有序(以元素插入的次序来排列)的对象;

List接口的实现类:ArrayList、LinkedList和vector;

1、ArrayList

存储方式:类似数组;

1、语法:

//语法一
//ArrayList和List都属于java.util的包
//这是非泛型的集合。
ArrayList list = new ArrayList();
//语法二
//ArrayList和List都属于java.util的包
//这是非泛型的集合。
List list = new ArrayList();
//语法三
//ArrayList和List都属于java.util的包
//这是泛型的集合。
ArrayList<String> list = new ArrayList<String>();
//这里String就是数据类型了,这里用的是数据类型必须是引用数据类型,如果要用基本数据类型可以使用基本数据类型的包装类
基本数据类型基本数据类型的包装类
intInteger
charCharacter
floatFloat
longLong

基本数据类型的包装类只有int和char是变化比较大的,其他的基本数据类型都只要大写首字母就可以了。

2、方法:

add()添加方法;

get(下标)取数据,下标从0开始到长度-1结束;

size()得到长度;

删除值:区别于C#:删除指定值:Remove,删除指定下标:RemoveAt; Java:删除值和删除下标都是用Remove方法,通过参数类型区分;如果是int就是下标,如果是其他类型就是值。

3、遍历:for,foreach,Iterator

//for
for(int i = 0;list.size();i++){
   System.out.println(list.get(i));
}
//foreach
for(int nun : list){
   System.out.println(num);
}
//Iterator遍历步骤:1、先将List/Set/Map转换成为Iterator对象---iterator()方法;2、通过hasNext()方法判断是否还有下一个值;3、通过Iterator对象得next()方法取值
Iterator it = list.iterator();
while(it.hasNext()){
    System.out.println(it.next());
}
2、LinkedList

1、LinkedList得存储方式:是链式存储(前一个会有一个指向下一个值的存储单位);

2、好处:适用于集合数据频繁的修改;不适用频繁的读取数据;

3、语法:

//语法一:非泛型
LinkedList list = new LinedList();
//语法二:泛型,这里的数据类型要是引用数据类型
LinkedList<String> link = new LinkedList<String>();

4、方法:

add()添加方法,add(int,Object)添加值到指定位置

addFried();添加到第一位

addLast();添加到最后一个;

addFried()和addLast()是LinkedList独有的方法。

clear()清空

getFried() 得到第一个;getLast()得到最后一个

iterator()转换成Iterator对象

remove()删除;removeFired()删除第一个;removeLast()删除最后一个

toArray()转换成数组

5、遍历 for,foreach,Iterator

//for
for(int i = 0;i < link.size();i++){
	System.out.println(link.get(i));
}

//foreach
for(int num : link){
    System.out.println(num);
}

//Iterator
Iterator it = link.iterator();
while(it.hasNext()){
    System.out.println(it.next());
}
3、Vector

Vector 和ArrayList是一样的操作,方法等;

Vector和ArrayList的区别:Vector是线程安全,ArrayList是线程不安全。

3、Set

Set在Java中也是接口,Set接口继承Collection接口,存储一组唯一(不允许重复)无序的对象;

1、操作:类似List

2、实现类:HashSet、TreeSet

1、HashSet:类似数组;

2、语法:

Set<Integer> hashSet = new Set<Integer>();

3、方法:

clear(); 清空

isEmpty(); 判断是否为空,为空就是true

iterator(); 转换成Iterator对象

size(); 得到长度

toArray();转换成数组

4、add()添加方法的特点:

同一个值只能添加一次;

//例
hashSet.add(10);
hashSet.add(10);
//一个值只能添加一次

5、遍历

//foreach
for(int num : hashSet){
	System.out.println(num);
}

//Iterator
Iterator it = hashSet.inerator();
while(it.hasNext()){
	System.out.println(it.next());
}

这里不能用for循环,因为这HashSet不能用下标来取值,因为它是无序的。

2、TreeSet

1、TreeSet:是以树形结构图存储的,继承了SocrtedSet接口

2、语法:

TreeSet<Integer> tree = new TreeSet<Integer>();

3、方法:

add() 添加方法,iterator()转换成Iterator对象,……

4、遍历:

//Iterator
Iterator it = tree.iterator();
while(it.hasNext()){
    it.next();
}

TreeSet在变量的时候会自动排序,默认是从小到大;

注:父类指向子类的时候,不能调用子类特有的方法;

4、Map

Map在Java中也是接口,Map的存储方式:存储一组成对的键 - 值对象,提供键(key)到值(value)的映射,Map中的key不要求有序,不允许重复,value同样不要求有序,但允许重复。

1、存储方式:key:value

2、实现类:HashMap、Hashtable、TreeMap、ConunrrentMap

1、HashMap

1、语法:不能有重复的key,否则会覆盖,key和value可以是null

//1
Map map = new HashMap();
//2
Map(String,String) map1 = new HashMap(String,String);
//3
HashMap map3 = new HashMap();

2、方法:

put(key,value); 添加

get(“key”); 取值

size(); 得到长度

3、遍历:

//所有的key
Set<String> setkey = map.KeySet();

//所有的value
Collection<String> coll = map.Values();

//遍历key,Iterator
Iterator<String> it = tree.iterator();
while(it.hasNext()){
    String key = it.next();
    System.out.println(key+"\t"+map.get(key));
}
//foreach
for(String key:setkey){
	 System.out.println(key);
}

//遍历value,Iterator
Iterator<String> it = tree.iterator();
while(it.hasNext()){
    String value = it.next();
    System.out.println(value+"\t"+map.get(key));
}
//foreach
for(String value:Values){
	 System.out.println(key);
}


2、Hashtable

1、语法:可以用重复的key,key和value都不能为null;

Hashtable<String,Integer> hash = new Hashtable<String,Integer>();

Hashtable方法和遍历和HashMap差不多。

2、线程安全:Hashtable,Vector,ConcurrentMap(特点是:速度慢,安全)

线程不安全:HashMap,ArrayList(特点是:速度快,不安全)

3、TreeMap

1、TreeMap是树形结构图存储,有二叉树算法在里面。

2、语法:key不能为null,可以添加重复的key,然后回覆盖掉以前key对应的value。

TreeMap<String,String> tree = new TreeMap<String,String>();

3、方法和遍历:

添加方法:put(“key”,“value”);

//遍历
for(String key:tree.KeySet()){
	System.out.println(key+"\t"+tree.get(key))
}

TreeMap会对key进行排序

4、ConunrrentMap

1、语法:

ConcurrentMap<String,String> con = new ConcurrentHashMap<String,String>();

2、添加方法:put(“key”,“value”);

3、实现安全的方式要比Hashtable更优,它是针对线程安全部分代码做了优化。

内容概要:本文介绍了一项创新性未发表的研究,即利用多元宇宙优化算法(Multiverse Optimizer, MVO)对分时电价下的需求响应与综合能源系统调度问题进行建模与求解,旨在实现能源系统的经济性、高效性与可持续性运行。该研究构建了包含多种能源设备(如光伏、风机、燃气轮机、储能系统等)及可调节负荷的综合能源系统模型,充分考虑了用户侧的需求响应行为在分时电价机制下的响应特性,通过MVO算法对系统运行成本、能源利用率、碳排放等多目标进行协同优化,实现了日前调度计划的智能决策。研究还提供了完整的MATLAB代码实现,便于研究人员复现实验、验证算法性能,并为进一步研究提供可靠的仿真基础。; 适合人群:具备一定电力系统、优化算法及MATLAB编程基础的科研人员、研究生以及从事能源互联网、综合能源系统规划与运行的技术工程师。; 使用场景及目标:① 学习并掌握多元宇宙优化算法在复杂能源系统调度中的具体应用方法;② 研究分时电价机制如何通过需求响应引导用户参与电网互动,实现削峰填谷;③ 实现综合能源系统(IES)中冷、热、电、气等多种能源的协同优化调度,以降低运行成本、提高新能源消纳能力和系统可靠性;④ 为相关领域的学术研究提供可复现的代码实例和仿真平台。; 阅读建议:此资源以MATLAB代码为核心载体,深入剖析了算法应用与系统建模的全过程。建议读者在学习时,不仅应关注代码的实现细节,更要理解其背后的数学模型、优化目标设定和约束条件的物理意义。建议结合文档中的模型描述,逐步调试代码,观察不同参数和场景下的优化结果,从而深刻掌握综合能源系统优化调度的设计思想与关键技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值