【Java学习笔记】集合

本文深入探讨Java集合框架,包括Collection、Map等基本概念、常用方法及具体应用实例,如HashSet、HashMap、ArrayList等。通过示例代码,详细解析如何高效地存储、访问和操作数据。
-----------------------------------------------个人初学,如有错误,欢迎指正-----------------------------------------------
Java学习笔记之集合

一、简介
Java的集合包含两部分Collection和Map两部分。其中Map是以键—值对的映射关系实现数据存储的。常用的集合类有,Collection中已经实现的接口List,Set以及相应实现的子类。Map中的HashMap和TreeMap。下面是一张简单的集合框架体系图:


二、集合中常用的基本方法
2.1Collection
        2.1.1Collection之Set
        Set最大的特点就是存储的元素不重复。你可以把Set理解为过滤器,它会主动帮你过滤掉数据中的重复元素,对于相同的数据,存储仅且存储一次。
        1>子类HashMap,它根据Hash算法随机生成数据的地址,实现无序的存储,如果你遍历HashMap中的元素,元素的输出顺序很可能与录入的顺序不同。
        2>子类TreeSet,与HashMap不同的是,TreeSet对存入的数据进行了排序,排序的方法可以由用户实现Comparable接口后自定义,因此外部可以有序的遍历成员,成员的输出顺序与用户实现Comparable接口后自定义的排序方法一致
        2.1.2Collection之List
        List可以理解为加强版的数组,它可以基于索引(下标)对成员实现随机访问。与数组不同的是List的大小会根据你存入的元素多少自动分配,你可以理解为,List是“按需非配”,而且List还提供了比数组更多的功能。
        1>子类ArrayList,可以根据索引快速的操作元素(同数组一样)。
        2>子类LinkList,可以对任意位置的元素进行操作,但是对基于索引的成员访问比较耗时。
2.2Map
        Map是以键-值对映射存储数据的,存储的每个键—值对中,键必须具有唯一性,根据给定的键获取成员的值。
        2.2.1Map之HashMap
        HashMap满足通用的Map需求,内部无序。
        2.2.2Map之TreeMap
        TreeMap可以按键值对元素进行有序遍历,遍历的顺序与用户实现Comparable接口对Map的键自定义排序的顺序一致。

三、使用方法
        下面是一些程序示例,以便帮助大家更好的理解集合
        3.1HashSet
//---------------HashSet存储的数据不重复------------------------
	private static void MyHashSet(Set mySet){
		
		//向mySet中存入50以内不重复的8个数
		Random rd = new Random();
		int num,count = 0;
		while(mySet.size() < 8){
			num = rd.nextInt(50);
			mySet.add(num);
			count++;
		}
		System.out.println("生成五个不重复的数,while循环共执行了【 "+count+"】次");
		
		//使用迭代器遍历mySet
		System.out.println("mySet数据:");
		Iterator it = mySet.iterator();
		while(it.hasNext()){
			System.out.print(it.next()+" ");
		}
		System.out.println("\n");
		
		mySet.clear();//清空mySet
		
		//使用remove方法删除mySet的数据
		int k = 0;
		while(k<count){//重新添加数据
			mySet.add(k*3);
			k++;
		}
		System.out.println("mySet数据更新后:");
		it = mySet.iterator();
		while(it.hasNext()){
			System.out.print(it.next()+" ");
		}
		
		mySet.remove(5);
		System.out.println("\n执行mySet.remove(5)后,mySet数据:");
		it = mySet.iterator();
		while(it.hasNext()){
			System.out.print(it.next()+" ");
		}
		
		//使用remove方法删除mySet的数据
		mySet.clear();
		while(count > 0){//重新添加数据
			mySet.add(count--);
		}
		
		System.out.println("\n\nmySet数据更新后:");
		it = mySet.iterator();
		while(it.hasNext()){
			System.out.print(it.next()+" ");
		}
		
		mySet.remove(5);
		System.out.println("\n执行mySet.remove(5)后,mySet数据:");
		it = mySet.iterator();
		while(it.hasNext()){
			System.out.print(it.next()+" ");
		}
		
	}
运行结果:

    
    3.2HashMap
/*
	 * HashMap操作
	 * 
	 */
	private static  void MyHashMap(Map myMap){
	//---------------HashMap以键值对(key-value)存储数据------------------------
	//其中,key关键字不能重复,必须具有唯一性。value值可以重复
		Random rd = new Random();
	
		System.out.println("myMap中的数据(key-value):");
		for(int i=0; i< 10; i++){
			//使用put方法,向map中添加数据
			String key = "A"+i;
			int value = rd.nextInt(100);
			myMap.put(key,value);
			System.out.println(key+"-"+value);	
		}
		
		//使用containsKey方法,判断map中是否包含对应关键字
		boolean IsContain =  myMap.containsKey("A3");
		System.out.println("myMap 中包含 A3关键字吗:"+IsContain);

		//使用containsValue方法,判断map中是否包含对应值
		IsContain =  myMap.containsValue(50);
		System.out.println("myMap 中包含 50这个数值吗:"+IsContain);
		
		//使用containsValue方法,判断map中是否包含对应值
		Object value = myMap.get("A5");
		System.out.println("关键字A5对应的值是:"+value);
		value = myMap.get("A10");
		System.out.println("关键字A10对应的值是:"+value);
		
		
	}
运行结果:
<img src="https://img-blog.youkuaiyun.com/20160221134425293" alt="" style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);" />

    3.2ArrayList
/*
	 * ArrayList操作
	 * 
	 */
	private static void MyArrayList(List myList){
		
		Random rd = new Random();
		for(int i = 0; i< 10; i++){
			myList.add(rd.nextInt(100));
		}
		
		
	//---------------使用迭代器遍历ArrayList------------------------
		System.out.println("使用迭代器遍历ArrayList");
		Iterator it = myList.iterator();//得到迭代器
		while(it.hasNext()){//还有下一个元素
			System.out.print(it.next()+" ");
		}
		System.out.println("\n");
		
	//---------------使用for循环遍历ArrayList------------------------	
		System.out.println("使用for循环遍历ArrayList");
		for(int k = 0; k<myList.size(); k++){
			System.out.print(myList.get(k)+" ");
		}
		System.out.println("\n");
		
	//---------------使用集合提供的方法排序List------------------------
		Collections.sort(myList);
		System.out.println("\n排序:");
		it = myList.iterator();//得到迭代器
		while(it.hasNext()){//还有下一个元素
			System.out.print(it.next()+" ");
		}
		System.out.println("\n");
	
	//---------------得到指定元素------------------------	
	//使用get方法得到集合中指定位置的元素	
	System.out.println("第3个元素是:"+myList.get(2));	
	
	//---------------删除指定下标的元素------------------------	
	System.out.println("删除的第4个元素是:"+myList.get(3));	
	myList.remove(3);//使用remove方法删除集合中的元素
	System.out.println("删除后的集合:");
	it = myList.iterator();//得到迭代器
	while(it.hasNext()){//还有下一个元素
		System.out.print(it.next()+" ");
	}
	System.out.println("\n");
	}
运行结果:



    3.2ArrayList泛型操作
package exp;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

public class ArrayListDemo {

	public static void main(String[] args) {

		List<Integer> list = new ArrayList<Integer>();
		IntegerArr(list);
		List<String> list2 = new ArrayList<String>();
		StringArr(list2);
		List<StudentInf> list3 = new ArrayList<StudentInf>();
		ObjectArr(list3);
	}
	
	
	
	private static void IntegerArr(List<Integer> list){
		
		Random rd = new Random();
		for(int i =0; i< 10; i++){
			list.add(rd.nextInt(50));
		}
		
		System.out.println("ArrayList存储整形数值:");
		Iterator it =list.iterator();
		while(it.hasNext()){
			System.out.print(it.next()+" ");
		}
		System.out.println("\n");
	}
	
	private static void StringArr(List<String> list){
		
		for(int i = 0; i< 10; i++){
			list.add("A"+i);
		}
		System.out.println("ArrayList存储字符串值:");
		Iterator it =list.iterator();
		while(it.hasNext()){
			System.out.print(it.next()+" ");
		}
		System.out.println("\n");
	}

	
	private static void ObjectArr(List<StudentInf> list){
		StudentInf stuInf;
		String[] name = {"刘雅","李佳","陈馨","张凯","王力"};
		String sex,sexStr = "男女";
		for(int i = 0; i< 5; i++){
			if(i < 3)
				sex = sexStr.charAt(1)+"";
			else
				sex = sexStr.charAt(0)+"";
			stuInf = new StudentInf(name[i],sex,"高三一班");
			list.add(stuInf);
		}
		
		System.out.println("ArrayList存储对象:");
		Iterator it =list.iterator();
		while(it.hasNext()){
			System.out.println(it.next().toString());
		}
		System.out.println("\n");
	}
	
}



	class StudentInf{
		private String name;
		private String sex;
		private String classmate;
		
		public StudentInf(){}
		
		public StudentInf(String name,String sex,String classmate){
			this.name = name;
			this.sex = sex;
			this.classmate = classmate;
		}

		@Override
		public String toString() {
			String inf;
			inf = "姓名:"+this.name+"\t  性别:"+this.sex+"\t班级:"+this.classmate;
			return inf;
		}
		
		
		
	}
运行结果:

所有结果都正确打印了

四、小结
        ArrayLsit有序,且可以存储重复数值。get(index)可以得到下标为index的对应数值。remove(index)则删除对应下标的值。add()方法可以向ArrayList里添加数据。
      Hashset无序,存放不重复的数值,remove(vaule)删除对应值为value的元素
      HashMap是以键值对存储数据,关键字具有唯一性,值可以重复。


【电力系统】单机无穷大电力系统短路故障暂态稳定Simulink仿真(带说明文档)内容概要:本文档围绕“单机无穷大电力系统短路故障暂态稳定Simulink仿真”展开,提供了完整的仿真模型与说明文档,重点研究电力系统在发生短路故障后的暂态稳定性问题。通过Simulink搭建单机无穷大系统模型,模拟不同类型的短路故障(如三相短路),分析系统在故障期间及切除后的动态响应,包括发电机转子角度、转速、电压和功率等关键参数的变化,进而评估系统的暂态稳定能力。该仿真有助于理解电力系统稳定性机理,掌握暂态过程分析方法。; 适合人群:电气工程及相关专业的本科生、研究生,以及从事电力系统分析、运行与控制工作的科研人员和工程师。; 使用场景及目标:①学习电力系统暂态稳定的基本概念与分析方法;②掌握利用Simulink进行电力系统建模与仿真的技能;③研究短路故障对系统稳定性的影响及提高稳定性的措施(如故障清除时间优化);④辅助课程设计、毕业设计或科研项目中的系统仿真验证。; 阅读建议:建议结合电力系统稳定性理论知识进行学习,先理解仿真模型各模块的功能与参数设置,再运行仿真并仔细分析输出结果,尝试改变故障类型或系统参数以观察其对稳定性的影响,从而深化对暂态稳定问题的理解。
本研究聚焦于运用MATLAB平台,将支持向量机(SVM)应用于数据预测任务,并引入粒子群优化(PSO)算法对模型的关键参数进行自动调优。该研究属于机器学习领域的典型实践,其核心在于利用SVM构建分类模型,同时借助PSO的全局搜索能力,高效确定SVM的最优超参数配置,从而显著增强模型的整体预测效能。 支持向量机作为一种经典的监督学习方法,其基本原理是通过在高维特征空间中构造一个具有最大间隔的决策边界,以实现对样本数据的分类或回归分析。该算法擅长处理小规模样本集、非线性关系以及高维度特征识别问题,其有效性源于通过核函数将原始数据映射至更高维的空间,使得原本复杂的分类问题变得线性可分。 粒子群优化算法是一种模拟鸟群社会行为的群体智能优化技术。在该算法框架下,每个潜在解被视作一个“粒子”,粒子群在解空间中协同搜索,通过不断迭代更新自身速度与位置,并参考个体历史最优解和群体全局最优解的信息,逐步逼近问题的最优解。在本应用中,PSO被专门用于搜寻SVM中影响模型性能的两个关键参数——正则化参数C与核函数参数γ的最优组合。 项目所提供的实现代码涵盖了从数据加载、预处理(如标准化处理)、基础SVM模型构建到PSO优化流程的完整步骤。优化过程会针对不同的核函数(例如线性核、多项式核及径向基函数核等)进行参数寻优,并系统评估优化前后模型性能的差异。性能对比通常基于准确率、精确率、召回率及F1分数等多项分类指标展开,从而定量验证PSO算法在提升SVM模型分类能力方面的实际效果。 本研究通过一个具体的MATLAB实现案例,旨在演示如何将全局优化算法与机器学习模型相结合,以解决模型参数选择这一关键问题。通过此实践,研究者不仅能够深入理解SVM的工作原理,还能掌握利用智能优化技术提升模型泛化性能的有效方法,这对于机器学习在实际问题中的应用具有重要的参考价值。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值