当前位置: 首页 > news >正文

第六章.java集合与泛型

文章目录

  • 1.集合框架
    • 1. Collection 接口存储一组==不唯一,无序==的对象
    • 2. Set接口存储一组==唯一,无序==的对象
    • 3. Map接口存储一组键值对象,提供key到value的映射
  • 2.封装
  • 3.练习题

1.集合框架

  • java集合框架提供了一套性能优良,使用方便的接口和类,它们位于java.util中
  • 在这里插入图片描述
  • 在这里插入图片描述

1. Collection 接口存储一组不唯一,无序的对象

  • (1). List接口存储一组不唯一,有序(插入顺序)的对象
    • list 方法
      • size 大小
      • add 添加
      • remove 移除(//删除方法都可以得到对象)
      • clear 清空(通用)
      • contains 判断
      • get 获取
        - 在这里插入图片描述
    • ArrayList一般会向上转型为List,LinkedList不向上转型,因为有自己的特有方法
    • ArrayList(数组集合)实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素是效率比较高 {默认大小10,扩容50%,数据越大时损失越严重}
package JiHe;import java.util.ArrayList;
import java.util.List;public class Test {public static void main(String[] args) {List list = new ArrayList();//添加list.add("数据1");list.add(0,"新数据1");list.add(1);//大小list.size();//移除list.remove(1);list.remove("新数据1");//都有返回值,可以选择接收,也可以选择不接收\//判断是否有这样的数据boolean isYou = list.contains(1);//只是判断括号里的数据,不判断地址是否存在System.out.println(isYou);list.add("数据2");list.add("数据3");list.add("数据4");//清空集合
//		list.clear(); System.out.println(list.size());list.add("1111111111");//移除 清空集合 删除后,扩容的空间依旧存在,不变//判断两个集合是否一致list.equals(list); //得到某个下标的值System.out.println(list.get(0));//常用于:for(int i = 0 ; i < list.size() ; i++) {System.out.println(list.get(i));}System.out.println("------------------------");//增强for循环for(Object obj : list) {System.out.println(obj);}}
}
    • LinkedList(链表集合)采用链表存储方式.插入删除元素时效率比较高
      • 相较于ArrayList多了六种方法 (仅限于LinkedList)
        • addFirst()
        • addLast()
        • removeFirst()
        • removeLast()
        • getFirst()
        • getLast()

--------------------LinkedList------------------------------------------------------
package JiHe;import java.util.LinkedList;public class Eq4 {public static void main(String[] args) {LinkedList<String> strList = new LinkedList<String>();strList.add("中国");strList.add("美国");strList.add("日本");strList.add("韩国");//添加首位末位strList.addFirst("添加首位");strList.addLast("添加末位");//移除首位末位strList.removeFirst();strList.removeLast();//获取首位末位strList.removeFirst();strList.getLast();System.out.println(strList.size());}}

2. Set接口存储一组唯一,无序的对象

  • HashSet是Set接口常用的实现类
  • Set中存放的是对象的引用
  • equals()判断两个对象是否相等
package JiHe;import java.util.HashSet;
import java.util.Iterator;public class HashSetTest {public static void main(String[] args) {HashSet<String> strSet = new HashSet<String>();strSet.add("一");strSet.add("二");strSet.add("三");strSet.add("二");strSet.add("三");System.out.println(strSet);//输出是唯一且无序的System.out.println(strSet.size());System.out.println(strSet.remove("一"));
//		System.out.println(strSet.remove(index ));//没有移除下标操作
//		System.out.println(strSet.get("一"));//没有get操作System.out.println(strSet.contains("一"));
//		strSet.clear();//通用System.out.println("--------------------");//可以通过循环得得到值//1.for eachfor(String string :strSet) {System.out.println(strSet);}System.out.println("--------------------");//2.自带的forEachstrSet.forEach(str ->System.out.println(str));System.out.println("--------------------");//3.迭代器Iterator<String> iteStr = strSet.iterator();while(iteStr.hasNext()) {String str = iteStr.next();System.out.println(str);}}}

3. Map接口存储一组键值对象,提供key到value的映射

  • 专门处理键值映射数据的存储,可以根据键实现对值的操作
  • 最常用的实现类是HashMap
    • 遍历Map集合
      • 1.通过迭代器Iterator实现
        • 获取Iterator:Collection接口的Iterator()方法
        • Iterator的方法
        • boolean hasNext():判断是否存在另一个可访问的元素
        • Object next():返回要访问的下一个元素
      • 2.增强for循环
      • 3.forEach()方法
package JiHe;import java.util.HashMap;
import java.util.Map;public class HashMapTest {public static void main(String[] args) {//保证与<>里面类型一致Map<String, Object> map = new HashMap<String, Object>();//创建map集合//1.添加数据map.put("cn", "中国");map.put("usa", "美国");map.put("jp", "日本");map.put("one","一");map.put("two","二");//2.集合大小System.out.println(map.size());map.put("two","2");System.out.println("key值一样"+map.size());//大小一样,不受影响,因为key值不变map.put("three", "三");System.out.println("key值不一样"+map.size());//大小改变,受到影响,因为key值改变//3.获取key,得到valueObject obj = map.get("two");System.out.println(obj);//4.删除//删除方法都可以得到对象//4.1删除key值Object deObject= map.remove("two"); System.out.println("删除key的值"+deObject);//4.2删除key与value(jdk1.8提供)Object deObject2 = map.remove("one","一");System.out.println("删除key与value的值"+deObject2);System.out.println("map集合大小"+map.size());//5.判断是否存在(只能两个分开判断)//5.1判断key值是否存在System.out.println("key值是否存在:"+map.containsKey("one"));//5.2判断value值是否存在System.out.println("value值是否存在:"+map.containsValue("中国"));//6.1foreachfor(String key:map.keySet()) {System.out.println(key+"---"+map.get(key));}System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");//6.2自带forEachmap.forEach((a,b) -> System.out.println(a + "---" + b));//7.清空集合map.clear();//8.判断集合是否为空(前提对象不为null)map = new HashMap<String, Object>();//为空System.out.println("集合是否为空:"+map.isEmpty());Map<String, Eq2Stu> stuMap = new HashMap<>();Eq2Stu stu = new Eq2Stu("张三",100,"嘿嘿");stuMap.put(stu.getNameString(),stu);}} 

2.封装

  • 对于基本数据类型的封装(将基本类型转换为封装类型)
    • //byte short int long float double char boolean
    • //将基本类型封装
    • //Byte Short Integer Long Float Double [前六个父类为Number] Character Boolean
    • 除Character 其它封装类型都可以转换字符串
    • 封装类型与基本类型可以互换,但可能出现空指针异常
    • 字符串转成基本类型是,可能出现数字格式化异常
package JiHe;import java.util.concurrent.atomic.AtomicIntegerArray;public class MyNumber {//封装类型,能与字符串进行转换,除character外int i = 10 ;//基本类型 不能= nullInteger a = null;//引用类型  可以= nullpublic void test() {System.out.println(i);System.out.println(a);a =10;i = a;//封装引用类型 与 基本类型是可以相互转换的 //实际上 i = a.intValue(); 调用了封装类型转基本类型System.out.println(i);}public static void main(String[] args) {new MyNumber().test();int a = new Integer("12");//可以将数字字符串转换成数据类型,不是数字字符串不能转System.out.println(a + 10);double d = Double.parseDouble("12.345");//加上a后,编译正常,运行异常,去除后正常System.out.println(d*10);//封装类型中 只有 Character 例外,不能与字符进行互相转换//		char c = new Character("c");//不能转
//		c = Character.parse//报错new Float("1.1");Float.parseFloat("1.1");//常用此转换Float fff = new Float("11.0");float ff = fff.floatValue() ;//封装类型转基本类型new Byte("1");Byte.parseByte("1");new Short("2");Short.parseShort("2");boolean bb = new Boolean("true1");//除了字符串true,其余字符串转换 都是falseSystem.out.println(bb);}
}
  • 泛型(<限制的类型>)的作用
    • 限制类型录入
    • 避免强制转换出错
//1.泛型集合
package JiHe;public class Dog {private String color;private String strainString2;private int age;//构造方法public Dog(String color, String strainString2, int age) {super();this.color = color;this.strainString2 = strainString2;this.age = age;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public String getStrainString2() {return strainString2;}public void setStrainString2(String strainString2) {this.strainString2 = strainString2;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Dog [color=" + color + ", strainString2=" + strainString2 + ", age=" + age + "]";}}
------------------------------------------------------------------------------------------------------------------------package JiHe;import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;public class TestDog {public static void main(String[] args) {System.out.println("请输入狗的数量");Scanner input = new Scanner(System.in);int num = 0;try {num = input.nextInt();} catch (Exception e) {input.next();num =5;}ArrayList<Dog> dogList = new ArrayList();//<内容为所限制的 类型> 泛型,限制了集合中数据的录入//循环添加狗for(int i = 0 ; i < num ; i ++) {System.out.println("狗的姓名:");String strainString = input.next();System.out.println("狗的年龄");int age = input.nextInt();System.out.println("狗的毛色:");String colorString = input.next();dogList.add(new Dog(colorString, strainString, age));}//计算狗的平均年龄int sumAge = 0;
//		for(Object obj : dogList) {
//			Dog dog = (Dog)obj; 
//			sumAge += dog.getAge();
//		}for(Dog dog : dogList) {System.out.println(dog);sumAge += dog.getAge();}System.out.println("---------------------------------");dogList.forEach(dog -> System.out.println(dog));//jdk1.8以后的方法System.out.println("---------------------------------");double avgAge = sumAge * 1.0 / dogList.size();System.out.println("平均年龄"+ avgAge);}}
*********************************************************************************
2.泛型类
package JiHe;public class Show<T> {//泛型类:使得变量类型灵活public T t;public T getT() {return t;}public void setT(T t) {this.t = t;}public static void main(String[] args) {
//		1.可以传任意类型
//		Show show = new Show<>();
//		show.setT("好好学习");
//		System.out.println(show.getT());
//		2.限制Show<Integer> show = new Show<>();show.setT(1);System.out.println(show.getT());}}

3.练习题

  • 1.将1-100之中的所有正整数存放在集合中,移除3的倍数的数据,再看一下集合的大小
package Test;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class Eq1 {public static void main(String[] args) {List<Integer> lstList = new ArrayList<Integer>();for(int i = 1 ; i <=100 ;i++) {lstList.add(i);}//不知道如何将lstList的值循环输出去判断
//		for(int j = 0 ; j <100 ; j++) {
//			if(lstList %3==0) {
//				lstList.remove(j);
//			}
//		}错误//正确for(int j = 0 ; j < lstList.size() ; j++) {int num = lstList.get(j);//定义一个值去接收if(num %3==0) {lstList.remove(j);}}System.out.println("1-100无三的倍数"+lstList);System.out.println(lstList.size());}
}
  • 2.添加四个学员对象,将学员添加到对象,移除姓名为张三的学员
package JiheTest;public class Eq2Stu {private String name;private int age;private String color;public Eq2Stu() {super();}@Overridepublic String toString() {//Idea与eclipse显示有区别return "{" +"name='" + name + '\'' +", age=" + age +", color='" + color + '\'' +'}';}public Eq2Stu(String name, int age, String color) {this.name = name;this.age = age;this.color = color;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}
}
---------------------------------------------------------
package JiheTest;
import java.util.List;
import java.util.ArrayList;public class Eq2 {public static void main(String[] args){List<Eq2Stu> lstList = new ArrayList();Eq2Stu stu = new Eq2Stu("张三",22,"11");lstList.add(stu);lstList.add(new Eq2Stu("张三",11,"22"));lstList.add(new Eq2Stu("张四",22,"211"));lstList.add(new Eq2Stu("张五",33,"244"));lstList.add(new Eq2Stu("张六",44,"334"));lstList.add(new Eq2Stu("张七",55,"1234"));System.out.println(lstList.remove(1));System.out.println(lstList.size());System.out.println(lstList.get(1));}
}
  • 3.产生50个随机数,将随机数转换成整数,奇数添加到集合中
package Test;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class Eq3 {public static void main(String[] args) {List<Integer> lstList = new ArrayList();for(int i = 0 ; i < 50 ; i++) {int num = (int)(Math.random()*1000);
//			System.out.println(num);if(num % 2 != 0) {lstList.add(num);}}System.out.println(lstList);}}
  • 4.生成班级姓名随机器,名字只能出现一次
    • 首先判断选择哪种方式
package JiHe;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;public class Eq4Test{public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 1. 输入班级学生名单System.out.println("请输入班级学生姓名,用空格分隔:");String input = scanner.nextLine();String[] namesArray = input.split(" ");// 2. 创建列表并打乱顺序List<String> nameList = new ArrayList<>(List.of(namesArray));//将数组转为集合//返回的列表是不可修改的(不能添加.删除,或修改元素Collections.shuffle(nameList);//打乱顺序// 3. 随机点名System.out.println("开始随机点名(输入q退出):");while (!nameList.isEmpty()) {System.out.println("按回车键抽取下一个名字...");String command = scanner.nextLine();if ("q".equalsIgnoreCase(command)) {break;}// 移除并返回列表中的第一个元素String selectedName = nameList.remove(0);System.out.println("被点到的同学是:" + selectedName);if (nameList.isEmpty()) {System.out.println("所有同学已被点完!");}}scanner.close();}
}
  • 5.添加学生对象,通过名称输入学员信息(map)
package JiHe;public class Eq5 {private String name;private int age;private String Id;public Eq5(String name, int age, String id) {super();this.name = name;this.age = age;Id = id;}public String getId() {return Id;}public void setId(String id) {Id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "姓名:" + name + ", 年龄:" + age + ", 学号:" + Id ;}}
-------------------------main----------------------------------------------------------------------
package JiHe;import java.util.HashMap;
import java.util.Scanner;public class Eq5Test {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);HashMap<String, Eq5> strMap = new HashMap<String, Eq5>();while (true) {System.out.println("\n学生管理系统");System.out.println("1. 添加学生");System.out.println("2. 查找学生");System.out.println("3. 显示所有学生");System.out.println("4. 退出");System.out.print("请选择操作: ");int choice = scanner.nextInt();switch (choice) {case 1: {addStudent(scanner, strMap);break;}case 2: {findStudnet(scanner,strMap);break;}case 3: {displayAllStudents(strMap);break;}case 4: {System.out.println("退出系统...");scanner.close();return;}default:System.out.println("无效选择,请重新输入");}}}private static void findStudnet(Scanner scanner,HashMap<String, Eq5>strMap) {System.out.println("请输入要查找的学生姓名:");String name = scanner.next();Eq5 stuEq5 = strMap.get(name);if(stuEq5 != null) {System.err.println("找到该学生信息"+stuEq5);}else {System.out.println("未找到");}}private static void addStudent(Scanner scanner,HashMap<String, Eq5>strMap) {System.out.println("请输入学生姓名");String name = scanner.next();if(strMap.containsKey(name)) {System.out.println("学生姓名存在");return;}System.out.println("输入学生年龄:");int age = scanner.nextInt();scanner.nextLine(); // 消耗换行符System.out.println("请输入学号");String Id = scanner.next();Eq5 stuEq5 = new Eq5(name, age, Id);strMap.put(Id, stuEq5);System.err.println("学生添加成功");}private static void displayAllStudents(HashMap<String, Eq5> strMap) {if (strMap.isEmpty()) {System.out.println("当前没有学生记录!");return;}System.out.println("\n所有学生信息:");for (Eq5 student : strMap.values()) {System.out.println(student);}}
}
  • 6.根据输入的姓名,修改年龄,必须是有效年龄,否则抛出异常,名字不允许重复
package JiHe;import java.util.HashMap;
import java.util.Map;class AgeManager {private Map<String, Integer> nameAgeMap;public AgeManager() {nameAgeMap = new HashMap<>();}/*** 添加或更新姓名和年龄* @param name 姓名* @param age 年龄*/public void addOrUpdateAge(String name, int age)  {// 验证年龄有效性if (age <= 0 || age > 150) {throw new RuntimeException("无效年龄: " + age + "。年龄必须是1-150之间的正整数。");}//        // 检查姓名是否已存在if (nameAgeMap.containsKey(name)) {
//            throw new RuntimeException("姓名 '" + name + "' 已存在,不允许重复。");nameAgeMap.remove(name);}// 添加或更新年龄nameAgeMap.put(name, age);System.out.println("成功添加/更新: " + name + " - " + age + "岁");}/*** 更新已存在的姓名对应的年龄* @param name 要更新的姓名* @param newAge 新的年龄*/public void updateAge(String name, int newAge) throws Exception {// 验证年龄有效性if (newAge <= 0 || newAge > 150) {throw new Exception("无效年龄: " + newAge + "。年龄必须是1-150之间的正整数。");}// 检查姓名是否存在if (!nameAgeMap.containsKey(name)) {throw new Exception("姓名 '" + name + "' 不存在,无法更新。");}// 更新年龄nameAgeMap.put(name, newAge);System.out.println("成功更新: " + name + " 的新年龄为 " + newAge + "岁");}/*** 获取所有姓名和年龄* @return 包含所有记录的字符串*/public String getAllRecords() {return nameAgeMap.toString();}public int getStudentCount() {return nameAgeMap.size();}
}
-----------------------------------------------------------------------main-----------------------------------
package JiHe;import java.util.Scanner;public class Main {public static void main(String[] args) {AgeManager manager = new AgeManager();Scanner input = new Scanner(System.in);System.out.println("学员信息录入中");System.out.println("请输入学员信息(输入'exit'结束输入)");while(true) {try {System.out.println("请输入学员的姓名:");String name = input.next();// 检查是否要退出if (name.equalsIgnoreCase("exit")) {break;}System.out.println("请输入学员的年龄:");int age =0;try {age = input.nextInt();} catch (Exception e) {System.out.println("错误: 年龄必须为数字");continue;}manager.addOrUpdateAge(name, age);System.out.println(manager.getAllRecords());} catch (Exception e) {System.out.println("错误: " + e.getMessage());}}// 提供更新功能if (manager.getStudentCount() > 0) {System.out.println("\n是否要更新学员年龄?(Y/N)");String choice = input.next();if (choice.equals("Y")) {while (true) {System.out.print("\n输入要更新的学员姓名(输入'exit'退出): ");String name = input.next();if (name.equalsIgnoreCase("exit")) {break;}System.out.print("输入新的年龄: ");try {int newAge =input.nextInt();manager.updateAge(name, newAge);}  catch (Exception e) {System.out.println("错误: " + e.getMessage());}}// 显示更新后的信息System.out.println("\n更新后的学员信息:");System.out.println(manager.getAllRecords());}}}
} 
  • 7.循环添加十个字符串,选出第二个字是"声"的添加到集合中
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;public class StrTest {public static void main(String[] args) {System.out.println("请输入十个字符串:");Scanner input = new Scanner(System.in);List<String> lst = new ArrayList<>();for(int i= 1; i<=10; i++){System.out.println("请输入第"+i+"个字符串");String str = input.next();if(str.length()>=2 && str.charAt(1)=='声'){//charAt()lst.add(str);}}System.out.println(lst);}
}

相关文章:

第六章.java集合与泛型

文章目录 1.集合框架1. Collection 接口存储一组不唯一,无序的对象2. Set接口存储一组唯一,无序的对象3. Map接口存储一组键值对象,提供key到value的映射 2.封装3.练习题 1.集合框架 java集合框架提供了一套性能优良,使用方便的接口和类,它们位于java.util中 1. Collection 接…...

elastic/go-elasticsearch与olivere/elastic

在 Go 语言中&#xff0c;与 Elasticsearch 交互的客户端库有多种选择&#xff0c;其中 github.com/elastic/go-elasticsearch/v8 和 github.com/olivere/elastic/v7 是两个常用的库。这两个库的功能和用途有一些差异&#xff0c;以下是它们的详细对比&#xff1a; 1. github.c…...

MYSQL之基础认识(卸载安装登录, 基本概念)

一. 卸载安装和登录 卸载 MYSQL 1. 查看有无mysql服务正在运行: ps ajx | grep mysql 2. 查看到 mysql 的服务名称: systemctl list-units --typeservice | grep mysql 3. 关闭 mysql 服务 4. 卸载 dpkg -l | grep mysql | awk {print $2} | xargs sudo apt remove --purg…...

Sentinel源码—7.参数限流和注解的实现一

大纲 1.参数限流的原理和源码 2.SentinelResource注解的使用和实现 1.参数限流的原理和源码 (1)参数限流规则ParamFlowRule的配置Demo (2)ParamFlowSlot根据参数限流规则验证请求 (1)参数限流规则ParamFlowRule的配置Demo 一.参数限流的应用场景 二.参数限流规则的属性 …...

JAVA:利用 Apache Tika 提取文件内容的技术指南

1、简述 Apache Tika 是一个强大的工具,用于从各种文件中提取内容和元数据。📄Tika 支持解析文档、📸图像、🎵音频、🎥视频文件以及其他多种格式,非常适合构建🔍搜索引擎、📂内容管理系统和📊数据分析工具。 样例代码:https://gitee.com/lhdxhl/springboot-…...

SVM(支持向量机)

SVM&#xff08;支持向量机&#xff09; 原理 SVM的核心目标是找到一个最大化分类间隔的超平面&#xff0c;将不同类别的样本分隔开。其原理可分为三部分&#xff1a; 线性可分情况 通过硬间隔最大化确定超平面&#xff0c;确保所有样本正确分类且间隔最大间隔定义为超平面到最…...

Spark,hadoop的组成

&#xff08;一&#xff09;Hadoop的组成 对普通用户来说&#xff0c; Hadoop就是一个东西&#xff0c;一个整体&#xff0c;它能给我们提供无限的磁盘用来保存文件&#xff0c;可以使用提供强大的计算能力。 在Hadoop3.X中&#xff0c;hadoop一共有三个组成部分&#…...

数据结构中的各种排序

排序之冒泡排序 原理&#xff1a;比较相邻的元素&#xff0c;将大的元素放右边&#xff0c;小的元素放左边。每一趟排的最后的元素一定是最大的元素&#xff0c;所有下一趟需要排列的元素可减少一个 public int[] bubbleSort(int[] attr) {for (int i 0; i < attr.length…...

Android 中实现 GIF 图片动画

在 Android 中&#xff0c;ImageView 从 Android 9.0&#xff08;API 级别 28&#xff09; 开始原生支持 GIF 动画&#xff0c;通过 AnimatedImageDrawable 类实现。在之前的版本中&#xff0c;ImageView 并不支持直接播放 GIF 动画&#xff0c;只能显示 GIF 的第一帧。 一、 …...

linux安装mysql数据库

1.判断系统是多少位的 file /sbin/init2.下载linux安装包 5.7.25.64位安装包链接&#xff1a;https://pan.baidu.com/s/13vFuRikwJaI96K0AmUQXzg提取码&#xff1a;ga7h其他版本安装 去官网下载&#xff1a;https://dev.mysql.com/downloads/mysql/3.创建mysql文件夹 mkdir /…...

基于SA模拟退火算法的车间调度优化matlab仿真,输出甘特图和优化收敛曲线

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于SA模拟退火算法的车间调度优化matlab仿真,输出甘特图和优化收敛曲线。输出指标包括最小平均流动时间&#xff0c;最大完工时间&#xff0c;最小间隙时间。 2…...

uniapp云打包针对谷歌视频图片权限的解决方案

谷歌在24年底推出把图片和视频细分为两个权限&#xff0c;uniapp使用uni.chooseImage云打包默认图片视频为一个权限,不符合谷歌要求会被下架 解决方法&#xff0c;在项目根目录下新建AndroidManifest.xml移除不必要的权限 <?xml version"1.0" encoding"utf…...

DSRAM介绍

DSRAM&#xff08;双端口静态随机存储器&#xff09;介绍 1. 基本概念 DSRAM&#xff08;Dual-Port Static Random Access Memory&#xff09;是一种双端口SRAM&#xff0c;支持两个独立的读写接口&#xff0c;允许两个设备&#xff08;如CPU、DMA、FPGA&#xff09;同时访问…...

【仿Mudou库one thread per loop式并发服务器实现】HTTP协议模块实现

HTTP协议模块实现 1. Util模块2. HttpRequest模块3. HttpResponse模块4. HttpContext模块5. HttpServer模块 1. Util模块 这个模块是一个工具模块&#xff0c;主要提供HTTP协议模块所用到的一些工具函数&#xff0c;比如url编解码&#xff0c;文件读写…等。 #include "s…...

教育行业网络安全:守护学校终端安全,筑牢教育行业网络安全防线!

教育行业面临的终端安全问题日益突出&#xff0c;主要源于教育信息化进程的加速、终端设备多样化以及网络环境的开放性。 以下是教育行业终端安全面临的主要挑战&#xff1a; 1、设备类型复杂化 问题&#xff1a;教育机构使用的终端设备包括PC、服务器等&#xff0c;操作系统…...

【网工第6版】第5章 网络互联②

目录 ■ IPV6 ▲ IPV6报文格式 ◎ IPV6扩展报头&#xff08;RFC2460&#xff09; ◎ IPv6相关协议 ▲ IPV6地址分类 ◎ IPv6地址基础 ◎ IPv6地址举例 ◎ IPv6地址分类 ◎ 特殊地址对比IPv4 vs IPv6 ▲ 过渡技术 本章重要程度&#xff1a;☆☆☆☆☆ ■ IPV6 与IPv4…...

ASP.NET Core 分层项目中EFCore的使用

文章目录 前言一、核心二、项目分层结构1&#xff09;安装 NuGet 包Web 项目InfrastructureLibrary项目 2&#xff09;领域模型和仓储接口 (Domain 层)3&#xff09;基础设施层实现 (Infrastructure 层)4&#xff09;应用层服务 (Application 层)5&#xff09;Web API 配置6&am…...

.net core 中directory , directoryinfo ,file, fileinfo区别,联系,场景

一、类定义及核心功能 ‌Directory类‌ ‌类型‌&#xff1a;静态类 ‌功能‌&#xff1a;提供目录操作的静态方法&#xff0c;包括创建、删除、移动目录&#xff0c;以及获取子目录或文件列表等。例如Directory.CreateDirectory()、Directory.GetFiles()。 ‌适用场景‌&…...

jvm-获取方法签名的方法

在Java中&#xff0c;获取方法签名的方法可以通过以下几种方式实现&#xff0c;具体取决于你的需求和使用场景。以下是详细的介绍&#xff1a; 1. 使用反射 API Java 提供了 java.lang.reflect.Method 类来获取方法的相关信息&#xff0c;包括方法签名。 示例代码&#xff1a…...

three.js中的instancedMesh类优化渲染多个同网格材质的模型

three.js小白的学习之路。 在上上一篇博客中&#xff0c;简单验证了一下three.js中的网格共享。写的时候就有一些想法&#xff0c;如果说某个场景中有一万棵树&#xff0c;这些树共享一个geometry和material&#xff0c;有没有好的办法将其进行一定程度上的渲染优化&#xff0…...

2025年一站式AI创作平台主要功能介绍及使用教程

在当今迅速发展的数字时代&#xff0c;人工智能&#xff08;AI&#xff09;已成为推动创新和提升工作效率的关键工具。今天给大家分享一个全面的一站式AIGC内容创作平台&#xff0c;对其主要功能及使用教程进行讲解&#xff0c;旨在帮助用户显著提升工作和学习效率。无论您需要…...

YOLO11改进,尺度动态损失函数Scale-based Dynamic Loss,减少标签不准确对损失函数稳定性的影响

在目标检测领域,标签噪声与尺度敏感问题始终是制约模型性能提升的"阿喀琉斯之踵"。2025年CVPR最佳论文提出的尺度动态损失函数(Scale-based Dynamic Loss, SDL),通过构建自适应损失调节机制,不仅实现了对YOLOv11检测精度的指数级提升,更重新定义了损失函数的设…...

<项目代码>YOLO小船识别<目标检测>

项目代码下载链接 YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0…...

我用deepseek做了一个提取压缩文件夹下pdf和word文件工具

由于最近需要把大量的压缩文件的pdf和word文件统一复制到一个文件夹中。 我们一般正常操作方式的是把一个压缩文件一个一个解压&#xff0c;然后在把一个的解压好的文件夹下文件复制到另外一个文件夹中。 这个也需太繁琐了&#xff0c;从以往统计的需要花费两个小时间&#x…...

单例模式 (Singleton Pattern)

单例模式是一种创建型设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。 核心特点 唯一性&#xff1a;一个类只能有一个实例 全局访问&#xff1a;提供全局访问该实例的方式 延迟初始化&#xff1a;通常在第一次被请求时才创建实…...

01-初识前端

一、邂逅前端开发 1.1. 软件开发、软件开发体系 这儿放个图~ 1.2.完善的应用程序包括哪些&#xff1f; 服务器开发 iOS开发、Android开发 Web开发 桌面开发&#xff08;windows&#xff0c;mac os&#xff09; iOS、mac os&#xff08;OC&#xff0c;swift&#xff09;&am…...

【JavaWeb后端开发03】MySQL入门

文章目录 1. 前言1.1 引言1.2 相关概念 2. MySQL概述2.1 安装2.2 连接2.2.1 介绍2.2.2 企业使用方式(了解) 2.3 数据模型2.3.1 **关系型数据库&#xff08;RDBMS&#xff09;**2.3.2 数据模型 3. SQL语句3.1 DDL语句3.1.1 数据库操作3.1.1.1 查询数据库3.1.1.2 创建数据库3.1.1…...

使用纯前端技术html+css+js实现一个蔬果商城的前端模板!

当我们刚开始学习前端的时候&#xff0c;我们都会先学习一些基础的编程知识点。对于网站开发前端学习&#xff0c;我们就会学习 html css js 等基础的前端技术&#xff0c;我们学习了基础编程知识后&#xff0c;肯定是需要一些项目&#xff0c;或者一些练习题&#xff0c;巩固一…...

SAP系统生产跟踪报表入库数异常

生产跟踪报表入库数异常 交库21820,入库43588是不可能的 原因排查: 报表的入库数取值,是取移动类型321 (即系检验合格后过账到非限制使用)的数. 查凭证,101过账2次21807,321过账了2次21794,然后用102退1次21794.就是说这批物料重复交库了. 解决&#xff1a; 方案一:开发增强设…...

mac 本地 docker 部署 nacos

标题查看 docker 的 nacos 版本 查看可用的Nacos版本,以最新版为例. 指定版本 自己修改即可. 访问Nacos镜像库地址&#xff1a;https://hub.docker.com/r/nacos/nacos-server/tags?page1&orderinglast_updated 标题二、挂载目录配置步骤 标题‌创建本地目录‌ 按用户要…...

cgroup threaded功能例子

一、背景 cgroup在如今的系统里基本都是默认打开的一个功能。对于cgroup的cpu子系统&#xff0c;默认的颗粒度是进程为维度进行cgroup的cpu及cpuset的控制。而对于一些复杂进程&#xff0c;可能的需求是进程里一些个别线程要绑定在X1-Xn这些cpu核上&#xff0c;而除了这些个别…...

Elasticsearch插件:IDEA中的Elasticsearch开发利器

Elasticsearch插件&#xff1a;IDEA中的Elasticsearch开发利器 一、插件概述 Elasticsearch插件是为IntelliJ IDEA设计的专业工具&#xff0c;它让开发者能在IDE内直接与Elasticsearch集群交互&#xff0c;提供了查询编写、索引管理、数据分析等全方位支持。 核心价值&#…...

electron从安装到启动再到打包全教程

目录 介绍 安装 修改npm包配置 执行安装命令 源代码 运行 打包 先安装git, 安装打包工具 导入打包工具 执行打包命令 总结 介绍 electron确实好用,但安装是真的要耗费半条命。每次安装都会遇到各种问题,然后解决了之后。后面就不需要安装了,但有时候比如电脑重装…...

【Linux】轻量级命令解释器minishell

Minishell 一、项目背景 在linux操作系统中&#xff0c;用户对操作系统进行的一系列操作都不能直接操作内核&#xff0c;而是通过shell间接对内核进行操作。 Shell 是操作系统中的一种程序&#xff0c;它为用户提供了一种与操作系统内核和计算机硬件进行交互的界面。用户可以通…...

KEIL报错解决方案:No Algorithm found for: 08001000H - 080012EBH?

改这里&#xff1a; Cortex JLink/JTrace Target Drive - Flash Download - Size&#xff1a; 配好你这款芯片应该用的空间大小...

用银河麒麟 LiveCD 快速查看原系统 IP 和打印机配置

原文链接&#xff1a;用银河麒麟 LiveCD 快速查看原系统 IP 和打印机配置 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇在银河麒麟操作系统的 LiveCD 或系统试用镜像环境下&#xff0c;如何查看原系统中电脑的 IP 地址与网络打印机 IP 地址的实用教程。在系统损坏…...

DeepseekV3MLP 模块

目录 代码代码解释导入和激活函数配置类初始化方法前向传播方法计算流程 代码可视化 代码 import torch import torch.nn as nn import torch.nn.functional as F# 定义激活函数字典 ACT2FN {"relu": F.relu,"gelu": F.gelu,"silu": F.silu,&q…...

Ubuntu 系统下安装和使用性能分析工具 perf

在 Ubuntu 系统下安装和使用性能分析工具 perf 的步骤如下&#xff1a; 1. 安装 perf perf 是 Linux 内核的一部分&#xff0c;通常通过安装 linux-tools 包获取&#xff1a; # 更新软件包列表 sudo apt update# 安装 perf&#xff08;根据当前内核版本自动匹配&#xff09; …...

安恒Web安全面试题

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…...

OSPF --- LSA

文章目录 一、OSPF LSA&#xff08;链路状态通告&#xff09;详解1. LSA通用头部2. OSPFv2 主要LSA类型a. Type 1 - Router LSAb. Type 2 - Network LSAc. Type 3 - Summary LSAd. Type 4 - ASBR Summary LSAe. Type 5 - AS External LSAf. Type 7 - NSSA External LSA 3. LSA泛…...

IDEA/WebStorm中Git操作缓慢的解决方案

问题描述 在WebStorm中进行前端开发时&#xff0c;发现Git操作&#xff08;如push、checkout、pull等&#xff09;特别缓慢&#xff0c;而在命令行(cmd)中执行相同的Git命令却很快&#xff0c;排除了网络问题。 解决方案 通过修改WebStorm安装目录下的runnerw.exe文件名可以…...

网络威胁情报 | Yara

Yara 是一个在威胁情报、数字取证和威胁猎取方面较为常用的语言。本文并非是Yara语言的教程&#xff0c;更多的是希望可以让大家知道这个语言的神奇之处及其在当今信息安全领域的重要性。 Yara 是什么&#xff1f; “恶意软件研究人员&#xff08;以及其他所有人&#xff09;…...

12.QT-Combo Box|Spin Box|模拟点餐|从文件中加载选项|调整点餐份数(C++)

Combo Box QComboBox 表⽰下拉框 核⼼属性 属性说明currentText当前选中的⽂本currentIndex当前选中的条⽬下标.从0开始计算.如果当前没有条⽬被选中,值为-1editable是否允许修改设为true时, QComboBox 的⾏为就⾮常接近 QLineEdit ,也可以 设置 validatoriconSize下拉框图标…...

FTTR 全屋光纤架构分享

随着光纤网络技术的发展&#xff0c;FTTR 技术逐步普及到千家万户&#xff0c;为了战未来&#xff0c;从现在开始构建并铺设 FTTR 全屋光纤是非常有必要的。 在前期 FTTR 全屋光纤网络的载荷搭建&#xff0c;可以额定为千兆网络或者2.5GE光纤网络&#xff0c;万兆光网最大的成本…...

内网穿透快解析免费开放硬件集成SDK

一、行业问题 随着物联网技术的发展&#xff0c;符合用户需求的智能硬件设备被广泛的应用到各个领域&#xff0c;而智能设备的远程运维管理也是企业用户遇到的问题 二、快解析内网穿透解决方案 快解析是一款内网穿透产品&#xff0c;可以实现内网资源在外网访问&#xff0c;…...

实验八 版本控制

实验八 版本控制 一、实验目的 掌握Git基本命令的使用。 二、实验内容 1.理解版本控制工具的意义。 2.安装Windows和Linux下的git工具。 3.利用git bash结合常用Linux命令管理文件和目录。 4.利用git创建本地仓库并进行简单的版本控制实验。 三、主要实验步骤 1.下载并安…...

《马尼拉》桌游期望计算器

《马尼拉》桌游期望计算器&#xff1a;做出最明智的决策 注&#xff1a;本项目仍在开发验证中&#xff0c;计算结果可能不够准确&#xff0c;欢迎游戏爱好者提供协助&#xff01; 在线使用 | GitHub 项目简介 马尼拉期望计算器是一个基于 Vue 3 Vite 开发的网页应用&#xff…...

VLAN间通讯技术

多臂路由 路由器使用多条物理线路&#xff0c;每条物理线路充当一个 VLAN 的网管 注意&#xff1a;路由器对端的交换机接口&#xff0c;需要设定 Access 类型&#xff0c;因为路由器的物理接口无法处理 VLAN 标签 。 单臂路由 使用 以太网子接口 (sub-interface) 实现。 …...

linux基础学习--linux文件与目录管理

linux文件与目录管理 1. 目录与路径 1.1 相对路径与绝对路径 绝对路径&#xff1a;路径写法一定从根目录/写起。 绝对路径的正确度要高。 相对路径&#xff1a;路径写法不是由/写起。 1.2 目录的相关操作 切换目录的命令是cd&#xff0c;下面是比较特殊的目录&#xff1a;…...

云原生--基础篇-2--云计算概述(云计算是云原生的基础,IaaS、PaaS和SaaS服务模型)

1、云计算概念 云计算是一种通过互联网提供计算资源&#xff08;包括服务器、存储、数据库、网络、软件等&#xff09;和服务的技术模式。用户无需拥有和维护物理硬件&#xff0c;而是可以根据需要租用这些资源&#xff0c;并按使用量付费。 2、云计算特点 &#xff08;1&am…...