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

常见的集合

1、Collection

  1. 单列集合的根接口

  2. 遍历方法

    Collection<String> c = new ArrayList<>();
    c.add("赵敏");
    c.add("小昭");
    c.add("素素");
    c.add("灭绝");
    System.out.println(c); //[赵敏, 小昭, 素素, 灭绝]//1、迭代器遍历
    Iterator<String> it = c.iterator();
    while(it.hasNext()){String e = it.next();System.out.println(s);
    }//2.使用增强for遍历集合
    for(String s: c){System.out.println(s); 
    }//3、forEac遍历
    c.forEach(new Consumer<String>{@Overridepublic void accept(String s){System.out.println(s);}
    });//也可以使用lambda表达式对匿名内部类进行简化
    c.forEach(s->System.out.println(s)); //[赵敏, 小昭, 素素, 灭绝]
    
  3. 常用方法

    Collection<String> c = new ArrayList<>();
    //1.public boolean add(E e): 添加元素到集合
    c.add("java1");
    c.add("java1");
    c.add("java2");
    c.add("java2");
    c.add("java3");
    System.out.println(c); //打印: [java1, java1, java2, java2, java3]//2.public int size(): 获取集合的大小
    System.out.println(c.size()); //5//3.public boolean contains(Object obj): 判断集合中是否包含某个元素
    System.out.println(c.contains("java1")); //true
    System.out.println(c.contains("Java1")); //false//4.pubilc boolean remove(E e): 删除某个元素,如果有多个重复元素只能删除第一个
    System.out.println(c.remove("java1")); //true
    System.out.println(c); //打印: [java1,java2, java2, java3]//5.public void clear(): 清空集合的元素
    c.clear(); 
    System.out.println(c); //打印:[]//6.public boolean isEmpty(): 判断集合是否为空 是空返回true 反之返回false
    System.out.println(c.isEmpty()); //true//7.public Object[] toArray(): 把集合转换为数组
    Object[] array = c.toArray();
    System.out.println(Arrays.toString(array)); //[java1,java2, java2, java3]//8.如果想把集合转换为指定类型的数组,可以使用下面的代码
    String[] array1 = c.toArray(new String[c.size()]);
    System.out.println(Arrays.toString(array1)); //[java1,java2, java2, java3]//9.还可以把一个集合中的元素,添加到另一个集合中
    Collection<String> c1 = new ArrayList<>();
    c1.add("java1");
    c1.add("java2");
    Collection<String> c2 = new ArrayList<>();
    c2.add("java3");
    c2.add("java4");
    c1.addAll(c2); //把c2集合中的全部元素,添加到c1集合中去
    System.out.println(c1); //[java1, java2, java3, java4]
    
1、List系列集合(有序、有下标,元素可以重复)
1、ArrayList
  1. 查询快、增删慢
  2. 实现原理:数组
  3. 底层原理:
    • 利用无参构造器创建的集合,会在底层创建一个默认长度为0的数组
    • 添加第一个元素时,底层会创建一个新的长度为10的数组
    • 存满时,会扩容1.5倍
    • 如果一次添加多个元素,1.5倍还放不下,则新创建数组的长度已实际为准
    • 在这里插入图片描述
2、LinkedList
  1. 查询慢,增删快

  2. 实现原理:双链表

  3. 源码查看在这里插入图片描述

  4. 应用场景

    //1.创建一个队列:先进先出、后进后出
    LinkedList<String> queue = new LinkedList<>();
    //入对列
    queue.addLast("第1号人");
    queue.addLast("第2号人");
    queue.addLast("第3号人");
    queue.addLast("第4号人");
    System.out.println(queue);//出队列
    System.out.println(queue.removeFirst());	//第4号人
    System.out.println(queue.removeFirst());	//第3号人
    System.out.println(queue.removeFirst());	//第2号人
    System.out.println(queue.removeFirst());	//第1号人
3、ArrayList与LinkedList的增删效率对比注意事项
		//ArrayList与LinkedList的增删快慢,主要针对于从中间索引插入,例如:ArrayList<String> arrayList = new ArrayList<>();LinkedList<String> linkedList = new LinkedList<>();System.out.println("--------------------------arrayList-------------------------------------");Date date = new Date();System.out.println("date = " + date);//10:26:43arrayList.add("xxxXXXxxx");arrayList.add("xxxXXXxxx");arrayList.add("xxxXXXxxx");for (int i = 0; i < 300000; i++) {//使用这个方法,会出现ArrayList比LinkedList效率更高的情况//arrayList.add("xxxXXXxxx");arrayList.add(2,"xxxXXXxxx");}Date date2 = new Date();System.out.println("date2 = " + date2);//10:26:47System.out.println("-----------------------------linkedList----------------------------------");Date date3 = new Date();System.out.println("date3 = " + date3);//10:26:47linkedList.add("xxxXXXxxx");linkedList.add("xxxXXXxxx");linkedList.add("xxxXXXxxx");for (int i = 0; i < 300000; i++) {//使用这个方法,会出现ArrayList比LinkedList效率更高的情况//linkedList.add("xxxXXXxxx");linkedList.add(2,"xxxXXXxxx");}Date date4 = new Date();System.out.println("date4 = " + date4);//10:26:47
2、Set系列集合(无序、无下标,元素不能重复)
1、HashSet
  1. 无序、无索引、不重复
  2. 去重对象:需重写equals与hashCode方法
  3. 实现原理:哈希表:数组+链表+红黑树
  4. 底层原理
    1. 创建一个默认长度16的数组,默认加载因子为0.75
    2. 使用元素的哈希值对数组的长度求余,计算出应存入的位置
    3. 判断当前位置是否为null,如果是null直接存入
    4. 如果不为空,表示有元素,调用hashCode与equals方法比较,相等,则不存;不相等,则存入数组
2、LinkedHashSet
  1. 有序、无索引、不重复

  2. 存入对象时,需指定排序方式

  3. 实现原理:哈希表:数组+链表+红黑树

    //方法1:第一步:先让Student类,实现Comparable接口
    //注意:Student类的对象是作为TreeSet集合的元素的
    public class Student implements Comparable<Student>{private String name;private int age;private double height;//无参数构造方法public Student(){}//全参数构造方法public Student(String name, int age, double height){this.name=name;this.age=age;this.height=height;}//...get、set、toString()方法自己补上..//第二步:重写compareTo方法//按照年龄进行比较,只需要在方法中让this.age和o.age相减就可以。/*原理:在往TreeSet集合中添加元素时,add方法底层会调用compareTo方法,根据该方法的结果是正数、负数、还是零,决定元素放在后面、前面还是不存。*/@Overridepublic int compareTo(Student o) {//this:表示将要添加进去的Student对象//o: 表示集合中已有的Student对象return this.age-o.age;}
    }
    
    //方法2:创建TreeSet集合时,传递比较器对象排序
    /*
    原理:当调用add方法时,底层会先用比较器,根据Comparator的compare方是正数、负数、还是零,决定谁在后,谁在前,谁不存。
    */
    //下面代码中是按照学生的年龄升序排序
    Set<Student> students = new TreeSet<>(new Comparator<Student>{@Overridepublic int compare(Student o1, Student o2){//需求:按照学生的身高排序return Double.compare(o1,o2); }
    });//创建4个Student对象
    Student s1 = new Student("至尊宝",20, 169.6);
    Student s2 = new Student("紫霞",23, 169.8);
    Student s3 = new Student("蜘蛛精",23, 169.6);
    Student s4 = new Student("牛魔王",48, 169.6);//添加Studnet对象到集合
    students.add(s1);
    students.add(s2);
    students.add(s3);
    students.add(s4);
    System.out.println(students); 
    
3、TreeSet
  1. 可排序(升序)、无索引、不重复

  2. 存入对象时,需指定排序方式

    1. 自定义的类实现Comparable接口
    2. 调用TreeSet集合有参数构造器,可以设置Comparator对象
  3. 实现原理:红黑树

    //排序方式2
    Comparator<Computer> computerComparator = new Comparator<Computer>(){@Overridepublic int compare(Computer o1, Computer o2) {//o2.getPrice()-o1.getPrice()降序//o1.getPrice()-o2.getPrice()升序return o2.getPrice()-o1.getPrice();}};Computer computer1 = new Computer("DELL", 5000, "红色");Computer computer2 =new Computer("HUAWEI",8000,"黑色");Computer computer3 =new Computer("LANXIAN",4000,"红色");Computer computer4 =new Computer("LANXIAN",2000,"黑色");Computer computer5 =new Computer("LANXIAN",1000,"黄色");TreeSet<Computer> computers = new TreeSet<>(computerComparator);computers.add(computer1);computers.add(computer2);computers.add(computer3);computers.add(computer4);computers.add(computer5);Iterator<Computer> iterator = computers.iterator();while (iterator.hasNext()){Computer next = iterator.next();System.out.println(next.toString());}
    

2、Map

  1. key=value的形式存在

  2. 遍历方法

    // 准备一个Map集合。Map<String, Double> map = new HashMap<>();map.put("蜘蛛精", 162.5);map.put("蜘蛛精", 169.8);map.put("紫霞", 165.8);map.put("至尊宝", 169.5);map.put("牛魔王", 183.6);System.out.println(map);// 1、获取Map集合的全部键Set<String> keys = map.keySet();for (String key : keys) {// 根据键获取对应的值double value = map.get(key);System.out.println(key + "=====>" + value);}// 2、调用Map集合提供entrySet方法,把Map集合转换成键值对类型的Set集合Set<Map.Entry<String, Double>> entries = map.entrySet();for (Map.Entry<String, Double> entry : entries) {String key = entry.getKey();double value = entry.getValue();System.out.println(key + "---->" + value);}//3、遍历map集合,传递匿名内部类map.forEach(new BiConsumer<String, Double>() {@Overridepublic void accept(String k, Double v) {System.out.println(k + "---->" + v);}});//遍历map集合,传递Lambda表达式map.forEach(( k,  v) -> {System.out.println(k + "---->" + v);});}
    }
    
1、HashMap
  1. 它的键是无序、不重复,没有索引

  2. 底层查看在这里插入图片描述

  3. 往Map集合中存储自定义对象作为键,为了保证键的唯一性,我们应该重写hashCode方法和equals方法

    //比如有如下案例:往HashMap集合中存储Student对象作为键,学生的家庭住址当做值。要求,当学生对象的姓名和年龄相同时就认为键重复。public class Student implements Comparable<Student> {private String name;private int age;private double height;// this  o@Overridepublic int compareTo(Student o) {return this.age - o.age; // 年龄升序排序}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age && Double.compare(student.height, height) == 0 && Objects.equals(name, student.name);}@Overridepublic int hashCode() {return Objects.hash(name, age, height);}public Student() {}public Student(String name, int age, double height) {this.name = name;this.age = age;this.height = height;}//...get,set方法自己补全....@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", height=" + height +'}';}
    }
    
2、LinkedHashMap
  1. 它的键有序的、不重复、无索引。
3、TreeMap
  1. 默认按照键的升序排列,键不重复,无索引

  2. 存入对象时,需指定排序方式

    //方法1
    //第一步:先让Student类,实现Comparable接口
    public class Student implements Comparable<Student>{private String name;private int age;private double height;//无参数构造方法public Student(){}//全参数构造方法public Student(String name, int age, double height){this.name=name;this.age=age;this.height=height;}//...get、set、toString()方法自己补上..//按照年龄进行比较,只需要在方法中让this.age和o.age相减就可以。/*原理:在往TreeSet集合中添加元素时,add方法底层会调用compareTo方法,根据该方法的结果是正数、负数、还是零,决定元素放在后面、前面还是不存。*/@Overridepublic int compareTo(Student o) {//this:表示将要添加进去的Student对象//o: 表示集合中已有的Student对象return this.age-o.age;}
    }
    
    /**方法2* 目标:掌握TreeMap集合的使用。*/
    public class Test3TreeMap {public static void main(String[] args) {Map<Student, String> map = new TreeMap<>(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return Double.compare(o1.getHeight(), o2.getHeight());}});
    //        Map<Student, String> map = new TreeMap<>(( o1,  o2) ->   Double.compare(o2.getHeight(), o1.getHeight()));map.put(new Student("蜘蛛精", 25, 168.5), "盘丝洞");map.put(new Student("蜘蛛精", 25, 168.5), "水帘洞");map.put(new Student("至尊宝", 23, 163.5), "水帘洞");map.put(new Student("牛魔王", 28, 183.5), "牛头山");System.out.println(map);}
    }
    

3、卡牌案例

  1. 新建Card卡牌类

    package com.wh.cards;
    //implements Comparable<Card>,重写compareTo方法,实现Card集合按Card.size大小排序
    public class Card implements Comparable<Card>{private String number;private String color;private int size;public Card(String number, String color, int size) {this.number = number;this.color = color;this.size = size;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public int getSize() {return size;}public void setSize(int size) {this.size = size;}@Overridepublic String toString() {return "Card{" +"number='" + number + '\'' +", color='" + color + '\'' +", size=" + size +'}';}@Overridepublic int compareTo(Card o) {//return this.size-o.size升序//return o.size-this.size降序return this.size-o.size;}
    }
  2. 新建Room房间类

    package com.wh.cards;import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.List;public class Room {List list= new ArrayList<Card>();public Room() {//构造函数,先把54张牌搞出来int size=0;String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};// b、花色:个数确定了,类型确定。String[] colors = {"♠", "♥", "♣", "♦"};for (int i = 0; i < numbers.length; i++) {for (int j = 0; j < colors.length; j++) {list.add(new Card(numbers[i],colors[j],size));}size++;}Card c1 = new Card("",  "🃏" , ++size);Card c2 = new Card("", "👲" , ++size);list.add(c1);list.add(c2);/*System.out.println("list.size()="+list.size());for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i).toString());}*/}public void start(){ArrayList xiaoLi= new ArrayList<Card>();ArrayList xiaoJiang= new ArrayList<Card>();ArrayList xiaoPeng= new ArrayList<Card>();// 打乱ArrayList的顺序Collections.shuffle(list);for (int i = 0; i < list.size()-3; i++) {if(i%3==1){xiaoLi.add(list.get(i));}else if(i%3==2){xiaoJiang.add(list.get(i));}else if(i%3==0){xiaoPeng.add(list.get(i));}}//底牌打印System.out.println(list.get(list.size()-3).toString());System.out.println(list.get(list.size()-2).toString());System.out.println(list.get(list.size()-3).toString());//底牌添加xiaoLi.add(list.get(list.size()-3));xiaoLi.add(list.get(list.size()-2));xiaoLi.add(list.get(list.size()-1));//手牌排序Collections.sort(xiaoLi);Collections.sort(xiaoJiang);Collections.sort(xiaoPeng);System.out.println("xiaoLi的牌,xiaoLi.size()="+xiaoLi.size());for (int i = 0; i < xiaoLi.size(); i++) {System.out.println(xiaoLi.get(i).toString());}System.out.println("*****************************");System.out.println();System.out.println("xiaoJiang的牌,xiaoJiang.size()="+xiaoJiang.size());for (int i = 0; i < xiaoJiang.size(); i++) {System.out.println(xiaoJiang.get(i).toString());}System.out.println("*****************************");System.out.println();System.out.println("xiaoPeng的牌,xiaoPeng.size()="+xiaoPeng.size());for (int i = 0; i < xiaoPeng.size(); i++) {System.out.println(xiaoPeng.get(i).toString());}System.out.println("*****************************");}
    }
  3. 新建测试类

    package com.wh.cards;
    public class test {public static void main(String[] args) {Room room=new Room();room.start();}
    }
  4. 另一种实现方式

    public class Demo {public static void main(String[] args) {//准备牌ArrayList<String> number = new ArrayList<>();ArrayList<String> color = new ArrayList<>();Map<Integer, String> poker = new HashMap<>();Collections.addAll(number, "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2");Collections.addAll(color, "♠", "♥", "♣", "♦");int i=0;for (String s1 : number) {for (String s2 : color) {i++;poker.put(i,s1+s2);}}poker.put(53, "👲");poker.put(54, "🃏");System.out.println("poker = " + poker);//打乱牌ArrayList<Integer> key_list = new ArrayList<>(poker.keySet());Collections.shuffle(key_list);System.out.println("key_list = " + key_list);//发牌HashMap<Integer, String> User_map1 = new HashMap<>();HashMap<Integer, String> User_map2 = new HashMap<>();HashMap<Integer, String> User_map3 = new HashMap<>();HashMap<Integer, String> floor_map4 = new HashMap<>();for (int j = 0; j < key_list.size(); j++) {if(j>=key_list.size()-3){floor_map4.put(key_list.get(j), poker.get(key_list.get(j)));}else if(j%3==0){User_map1.put(key_list.get(j), poker.get(key_list.get(j)));}else if(j%3==1){User_map2.put(key_list.get(j), poker.get(key_list.get(j)));}else if(j%3==2){User_map3.put(key_list.get(j), poker.get(key_list.get(j)));}}User_map1.putAll(floor_map4);//看牌getLookPoker(User_map1);getLookPoker(User_map2);getLookPoker(User_map3);getLookPoker(floor_map4);}private static void getLookPoker(HashMap<Integer, String> map) {map.forEach((k,v)-> System.out.print(v+"\t"));System.out.println();}
    }

相关文章:

常见的集合

1、Collection 单列集合的根接口 遍历方法 Collection<String> c new ArrayList<>(); c.add("赵敏"); c.add("小昭"); c.add("素素"); c.add("灭绝"); System.out.println(c); //[赵敏, 小昭, 素素, 灭绝]//1、迭代器遍…...

Swift知识点---RxSwift学习

1. 什么是RxSwift RxSwift是Swift函数响应式编程的一个开源库&#xff0c;由Github的ReactiveX组织开发、维护 RxSwift的目的是&#xff1a;让数据/事件流 和 异步任务能够更方便的序列化处理&#xff0c;能够使用Swift进行响应式编程 RxSwift本质上还是观察者模式&#xff…...

驾驭不断发展的人工智能世界

从很多方面来看&#xff0c;历史似乎正在重演。许多企业正争相采用生成式人工智能 (Gen AI)&#xff0c;就像它们争相采用云计算一样&#xff0c;原因也是一样的&#xff1a;效率、成本节约和竞争优势。 然而&#xff0c;与云一样&#xff0c;GenAI 仍是一项发展中的技术&…...

冒泡排序——基于Java的实现

简介 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;适用于小规模数据集。其基本思想是通过重复遍历待排序的数组&#xff0c;比较相邻的元素并交换它们的位置&#xff0c;以此将较大的元素逐步“冒泡”到数组的末尾。算法的名称源于其运行过程…...

Mendix 创客访谈录|Mendix赋能汽车零部件行业:重塑架构,加速实践与数字化转型

在当前快速发展的技术时代&#xff0c;汽车行业正经历着前所未有的数字化转型。全球领先的汽车零配件制造商面临着如何利用最新的数字技术优化其制造车间管理的挑战。从设备主数据管理到生产执行工单管理&#xff0c;再到实时监控产量及能耗&#xff0c;需要一个灵活、快速且高…...

船舶机械设备5G智能工厂物联数字孪生平台,推进制造业数字化转型

船舶机械设备5G智能工厂物联数字孪生平台&#xff0c;推进制造业数字化转型。在当今数字化浪潮推动下&#xff0c;船舶制造业正经历着前所未有的变革。为了应对市场的快速变化&#xff0c;提升生产效率&#xff0c;降低成本&#xff0c;并增强国际竞争力&#xff0c;船舶机械设…...

什么是jsonp请求

JSONP&#xff08;JSON with Padding&#xff09;是一种解决跨域请求问题的技术。它允许网页从不同的域名请求数据&#xff0c;而不受同源策略的限制。JSONP 通过动态创建 script 标签来实现跨域请求&#xff0c;因为 script 标签不受同源策略的限制。 一、工作原理 客户端&a…...

【C++】STL容器详解【上】

目录 一、STL基本概念 二、STL的六大组件 三、string容器常用操作 3.1 string 容器的基本概念 3.2 string 容器常用操作 3.2.1 string 构造函数 3.2.2 string基本赋值操作 3.2.3 string存取字符操作 3.2.4 string拼接字符操作 3.2.5 string查找和替换 3.2.6 string比…...

助贷行业的三大严峻挑战:贷款中介公司转型债务重组业务

大家是否察觉到一种趋势&#xff1f;现如今&#xff0c;众多贷款辅助服务机构与专注于债务再构的公司之间形成了紧密的“联动”。有的选择将获取的贷款需求转介给债务重组方&#xff0c;有的则直接下场&#xff0c;动用自身资本参与债务重组业务。这一现象背后&#xff0c;究竟…...

力扣第42题 接雨水

前言 记录一下刷题历程 力扣第42题 接雨水 接雨水 原题目&#xff1a;给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&…...

轻松录制每一刻:探索2024年免费高清录屏应用

你不会还在用一些社交工具来录屏吧&#xff1f;现在的市面上有不少免费录屏的软件了。别看如软件是免费的&#xff0c;它的功能比起社交工具的录屏功能来说全面的多。这次我就分享几款我用过的录屏工具。 1.福晰录屏大师 链接直达&#xff1a;https://www.foxitsoftware.cn/R…...

【小沐学OpenGL】Ubuntu环境下glfw的安装和使用

文章目录 1、简介1.1 OpenGL简介1.2 glfw简介 2、安装glfw2.1 直接命令二进制安装2.2 源码安装 3、测试glfw3.1 测试1&#xff0c;glfwglew3.2 测试2&#xff0c;glfwglad3.3 测试3 结语 1、简介 1.1 OpenGL简介 OpenGL作为图形界的工业标准&#xff0c;其仅仅定义了一组2D和…...

[数据集][目标检测]汽油检泄漏检测数据集VOC+YOLO格式237张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;237 标注数量(xml文件个数)&#xff1a;237 标注数量(txt文件个数)&#xff1a;237 标注类别…...

图文解析保姆级教程:Postman专业接口测试工具的安装和基本使用

文章目录 1. 引入2. 介绍3. 安装4. 使用 此教程摘选自我的笔记&#xff1a;黑马JavaWeb开发笔记16——请求&#xff08;postman、简单参数、实体参数、RequestParam映射&#xff09;想要详细了解更多有关请求各种参数介绍的知识可以移步此篇笔记。 1. 引入 在当前最为主流的开…...

jenkins配置流水线

新建任务&#xff0c;随便选一个名字&#xff0c;选中流水线 配置git的用户名和密码&#xff0c;记录ID&#xff0c;后面配置流水线的时候用。 pipeline {agent anystages {stage(stop app){steps {script {def remote [:]//配置服务地址&#xff0c;用户名和密码remote.na…...

SQL 编程基础

SQL&#xff08;结构化查询语言&#xff09;广泛应用于数据库操作&#xff0c;是每个程序员都需要掌握的技能之一。这篇文章将带你从基础入门&#xff0c;了解SQL编程中的常量、变量及流程控制语句。我们将采用简单易懂的语言&#xff0c;结合实际示例&#xff0c;帮助你轻松理…...

sql 中名字 不可以 包含 mysql中 具有 特定意义 的单词

这种sql执行不报错 这种sql执行报错 所以sql中名字不可以使用mysql中具有特定意义的单词 以此文章作为警告&#xff0c;我下次起名字不可以使用 mysql中具有特殊意义的字符 就因为这个导致我搞了一个多小时&#xff0c;急死我了&#xff0c;周五就要前后端联调了。下次千万不…...

分布式部署①

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 1. 需要部署的服务 Nacos 理论上,应…...

开源可视化大屏superset Docker环境部署

superset 开源可视化大屏Docker环境部署 前言 superset是俄罗斯开源的一款可视化大屏&#xff0c;用于数据可视化探索&#xff0c;含有丰富的图表组件&#xff0c;可以支持接入各种数据源。 接触superset就是想体验下可视化大屏功能&#xff0c;想最快速度安装成功&#xff…...

tomato靶场通关攻略

1.御剑2014找到IP地址 2.dirb扫描目录 3.再次详细扫描目录 4.访问找到的目录文件 进入antibots中 5.搜寻一会再info.php里面发现有东西 6.这个地方貌似可以进行利用 7.查看源代码发现包含include文件上传漏洞 8.网址后面跟?image../../../../../../../etc/passwd 9.既然可以查…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...