当前位置: 首页 > 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.既然可以查…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》

近日&#xff0c;嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》&#xff0c;海云安高敏捷信创白盒&#xff08;SCAP&#xff09;成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天&#xff0c;网络安全已成为企业生存与发展的核心基石&#xff0c;为了解…...