Java集合详解

news2024/11/14 20:37:14

目录

  • 友情提醒
  • 第一章、集合体系概述
    • 1.1)集合是什么?与数组的区别在哪
    • 1.2)集合体系与分类
  • 第二章、集合体系中的Collection和List接口/Set接口
    • 2.0)List接口/Set接口两者区别
    • 2.1)Collection接口中的常用方法
    • 2.2)list接口的独有方法
    • 2.3)Set接口独有的方法
    • 2.4)使用迭代器Iterator 遍历集合元素
  • 第三章、List集合下的ArrayList和LinkedList
    • 3.1)ArrayList集合
    • 3.2)LinkedList集合
    • 3.3)Vector集合
  • 第四章、Set集合下的HashSet和LinkedHashSet和TreeSet
    • 4.0)set集合如何比较
    • 4.1)HashSet集合
    • 4.2)LinkedHashSet集合
    • 4.3)TreeSet集合
    • 4.4)从TreeSet讲到Comparable和Comparator接口
  • 第五章、Map接口和HashMap集合
    • 4.1)
    • 4.2)
    • 4.3)

友情提醒

先看文章目录,大致了解知识点结构,直接点击文章目录可以跳转到文章指定位置。

第一章、集合体系概述

1.1)集合是什么?与数组的区别在哪

集合与数组类似,都是容器都可以存放数据,但二者有很大的区别。
①长度:
数组:固定长度,无法改变。
集合:长度可改变,可以扩容。
②存储:
数组:可以存储基本类型数据,还可以存储引用类型的数据,但是只能存储相同类型的数据。
集合:只能存储引用类型的数据并且可以存储不同引用类型的数据。

1.2)集合体系与分类

数组只有一种但是集合有很多分类每一种集合都有自己的特点:数据可重复,数据不可重复,数据无序,数据有序,直接存储,单列集合,以key-value形式存储的双列集合等等,最好背下来。
集合大家族如图:图片来自百度
在这里插入图片描述

第二章、集合体系中的Collection和List接口/Set接口

Collection集合体系下有两个直接的子接口:List和Set

2.0)List接口/Set接口两者区别

如下表:可以看出来Set很复杂。

特点ListSet
重复元素可以重复不可重复
下标有下标没有下标
存储有序,可存储多个null无序,只能存一个null
函数拥有独有函数无特有函数,均来自Collection
遍历有下标可多种方式遍历无下标只能用迭代器遍历
数据结构ArrayList:底层是可变数组HashSet:数据结构是哈希表,无序
数据结构LinkedList:底层是链表TreeSet:底层数据结构是二叉树,无序
数据结构Vector:底层是可变数组LinkedHashSet:底层是哈希表和链表,与别的set集合不同,它是有序的

2.1)Collection接口中的常用方法

大致分为增加,查找和删除数据方法,以及将集合转为数组的方法。

增加集合元素方法,类型转换方法

public class TestCollection {
    public static void main(String[] args) {
        test3();
    }
//-------------------------------分割--增加数据方法--------------------------------
/*
增加操作boolean add(E e):确保此 collection 包含指定的元素(可选操作)。
boolean addAll(Collection<? extends E> c):将指定 collection 中的所有元素
都添加到此 collection 中(可选操作)。 举例:coll.addAll(coll2);*/
    public static void test3() {
        Collection coll = new ArrayList(); //运用了多态性,方便展示Collection中的方法
        coll.add("abc");
        coll.add(123);//系统会自动装箱为Integer类型的对象然后再存入集合中 
        coll.add(3.14);//系统会自动装箱
        coll.add(true);
        coll.add(new Student("李雷", 20));
        coll.add(null);
        System.out.println(coll);//打印结果[abc, 123, 3.14, true, Student{name='李雷', age=20}, null]
	        
        //类型转换Collection -> 数组
        Object[] objs = coll.toArray();
        System.out.println(Arrays.toString(objs));//打印结果[abc, 123, 3.14, true, Student{name='李雷', age=20}, null]
  		
  		//类型转换数组 -> list集合
        List list = Arrays.asList(objs);     
        System.out.println(list);//打印结果[abc, 123, 3.14, true, Student{name='李雷', age=20}, null]   
	    
        System.out.println(list instanceof ArrayList);  //打印结果false
        System.out.println(list instanceof List);       //打印结果true
        System.out.println(list instanceof Collection); //打印结果true
		//获取集合元素的个数/容量大小 int size():返回此 collection 中的元素数。
        System.out.println(coll.size());
    }

查找集合元素

//查找
    public static void test2() {
        Collection coll = new ArrayList(); //多态
        coll.add("abc");
        coll.add(123);
        coll.add(3.1);
        coll.add(true);
        coll.add(new Student("李雷", 20));
        coll.add(null);
        
/*      boolean contains(Object o):如果此 collection 包含指定的元素,则返回 true。
        boolean containsAll(Collection<?> c):如果此 collection 包含指定 collection 中的所有元素,则返回 true。
        判断集合中是否存在元素:boolean isEmpty():如果此 collection 不包含元素,则返回 true。
 */
        boolean result = coll.contains("abc");
        System.out.println(result);	//打印结果true
        result = coll.contains(new Student("李雷", 20));
        System.out.println(result);	//打印结果true

        Collection coll2 = new ArrayList();
        coll2.add(123);
        coll2.add(true);
        coll2.add(new Student("李雷", 20));
        result = coll.containsAll(coll2);
        System.out.println(result);//打印结果true
        System.out.println(coll.isEmpty());//判断集合中是否存在元素
System.out.println("***********************************");

删除集合元素

//删除
       /* 移除交集部分
                boolean removeAll(Collection<?> c):移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 */
        boolean result2 = coll.removeAll(coll2);
        System.out.println(result2);
        System.out.println(coll);
        System.out.println(coll2);

        /*   保留交集部分
                boolean retainAll(Collection<?> c):仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。 */
		boolean result3 = coll.retainAll(coll2);
        System.out.println(result3);
        System.out.println(coll);
        System.out.println(coll2);
        
         
        
/*
		①删除操作:boolean remove(Object o):从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
		②清空操作:void clear():移除此 collection 中的所有元素(可选操作)。*/
	
        boolean result = coll.remove("abc");
        System.out.println(result);
        System.out.println(coll + "-->" + coll.size());
        coll.clear();
        System.out.println(coll + "-->" + coll.size());

    }
}

2.2)list接口的独有方法

获取:get方法

// 和index有关
    public static void test4() {
        List list = new ArrayList();        //多态了
        list.add("abc");
        list.add(123);
        list.add(3.14);
        list.add(true);
        list.add(new Student("韩梅梅", 19));
        System.out.println(list);
        /*
            获取操作:
                 E get(int index):返回列表中指定位置的元素。
         */
        //使用一般for循环遍历list集合元素
        for (int i = 0;i <= list.size() - 1;i++) {
            System.out.println(list.get(i));
        }
 

修改:set方法

    public static void test3() {
        List list = new ArrayList();        //多态了
        list.add("abc");
        list.add(123);
        list.add(3.14);
        list.add(true);
        list.add(new Student("韩梅梅", 19));
        System.out.println(list);
        /*
            改操作:
                E set(int index, E element):用指定元素替换列表中指定位置的元素(可选操作)。
         */
        list.set(3, false);
        System.out.println(list);
    }

删除:remove方法

    public static void test2() {
        List list = new ArrayList();        //多态了
        list.add("abc");
        list.add(123);
        list.add(3.14);
        list.add(true);
        list.add(new Student("韩梅梅", 19));
        System.out.println(list);

        /*
            删操作:
                E remove(int index):移除列表中指定位置的元素(可选操作)。
                boolean remove(Object o):从此列表中移除第一次出现的指定元素(如果存在)(可选操作)。
         */
//        Object obj = list.remove(0);
//        System.out.println(obj);
//        System.out.println(list);

        /*
            运行时异常:下标越界异常
            java.lang.IndexOutOfBoundsException: Index 123 out of bounds for length 5
            //   Object obj2 = list.remove(123);
         */

        boolean b = list.remove(Integer.valueOf(123));
        System.out.println(b);
        System.out.println(list);

    }

增加:add方法和addAll方法

    public static void test1() {
        List list = new ArrayList();        //多态了
        list.add("abc");
        list.add(123);
        list.add(3.14);
        list.add(true);
        list.add(new Student("韩梅梅", 19));
        System.out.println(list);

        /*
            增操作:
                void add(int index, E element):在列表的指定位置插入指定元素(可选操作)。
                boolean addAll(int index, Collection<? extends E> c):将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。
         */
//        list.add(2, false);
//        System.out.println(list);

        List list2 = new ArrayList();
        list2.add("def");
        list2.add(false);
        list2.add(new Student("李雷", 20));

        list.addAll(2, list2);
        System.out.println(list);

    }
}

2.3)Set接口独有的方法

①无特有函数,均来自Collection
②接口特点不可重复,没有下标,不保证存取的顺序,判断是否重复的依据:hashCode、equals

 //       利用set集合不存储重复元素的特点将 Collection集合重复的元素去除
public class Exer {
    public static void main(String[] args) {
        Collection coll = new ArrayList();
        coll.add("aaa");
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        coll.add("ccc");
        coll.add("bbb");
        //创建LinkedHashSet集合容器
        LinkedHashSet set = new LinkedHashSet(coll);
        System.out.println(set);//打印结果[aaa, bbb, ccc]
        //清空coll集合元素
        coll.clear();
        //将set集合中的元素全部加入到coll集合容器中
        coll.addAll(set);//
        System.out.println(coll);}
}

2.4)使用迭代器Iterator 遍历集合元素

分别使用了Iterator ,增强for,,普通for遍历了集合,最后一个例子使用了list独有的迭代器的previous方法进行了反向遍历。


		Collection coll = new ArrayList();
		        coll.add("aaa");
		        coll.add("aaa");
		        coll.add("bbb");
		        coll.add("ccc");
		        coll.add("ccc");
		        coll.add("bbb");
//使用iterator方法获得Iterator 对象
        Iterator it = coll.iterator();
    	System.out.println(it.next());//打印结果aaa
        System.out.println(it.next());//打印结果aaa
// System.out.println(it.next());写太多了这个,会运行时异常:没有足够元素的异常:java.util.NoSuchElementException
//使用hasNext判断是否有元素 循环遍历coll集合元素                
        while (it.hasNext()) {
            Object next =  it.next();
            System.out.print(next);//遍历结果
        }

       //使用增强for遍历coll集合
        for (Object obj: coll) {
             System.out.print(obj);
            }
        
   //因为list集合有get方法,而Collection 接口没有get方法,接口无法使用实现类独有方法,
   //所以强转为list集合后使用for循环遍历
      System.out.println("");
        List lis = (List)coll;
        for (int i = 0; i < lis.size(); i++) {
            System.out.print(lis.get(i));
             }
//使用迭代器遍历list集合
		System.out.println("正向遍历:");
		ListIterator lit = list.listIterator();     //获取List相关的迭代器对象
		while (lit.hasNext()) {
        System.out.print(lit.next());
       }
//使用迭代器反向遍历list集合
		 System.out.println("反向遍历:");
         while (lit.hasPrevious()) {
         System.out.println(lit.previous());

第三章、List集合下的ArrayList和LinkedList

3.1)ArrayList集合

①ArrayList类实现了collection接口、List接口,因此有了collection接口和List接口的方法,本身并没有太特别的方法。
②底层:它的底层使用的可变数组,所以有下标,并且是有序的可以按照数组的方式操作ArrayList集合,因为有下标可以直接通过下标查询,所以查询效率高;
③存取:可以保证数据的存取顺序(第一个元素添加到集合中,那么取出也是第一个取出),同时还可以保存重复元素,也可以存储null元素,因为增加和删除数据的时候其他数据要移动,所以增加和删除效率比较低。

//有独有方法但是没啥常用的独有方法
public class ArrayListDemo {
	public static void main(String[] args) {
		ArrayList list=new ArrayList();
		//向集合中添加数据
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		list.add("ddd");
		//遍历集合
		for (Iterator it = list.iterator(); it.hasNext();) {
			System.out.println(it.next());
		}
	}
}

3.2)LinkedList集合

①LinkedList类实现了collection接口、List接口,因此有了collection接口和List接口的方法,本身特别方法主要和首位相关。
②底层:使用的链接列表(链表)数据结构。链表结构的特点:有头有尾。
③存取:使用节点来存储数据,实际存储自己的数据+其他节点的地址,而作为链表结构中的最后一个节点的存储地址的空间是null。查询遍历由于链表结构的特点,查询只能从头一直遍历到链表的结尾,所以链表结构查询慢,但增加或者删除只需要在增加或者删除节点的位置上记住新的节点的地址即可,而其他节点不需要移动,所以增删速度会快。
独有方法

方法名解释
addFirst(E e)将指定元素插入此列表的开头
addLast(E e)将指定元素添加到此列表的结尾
getLast()返回此列表的最后一个元素
getFirst()返回此列表的第一个元素
removeFirst()移除并返回此列表的第一个元素
removeLast()移除并返回此列表的最后一个元素
//   独有方法:主要是首尾方法
public class TestLinkedList {
    public static void main(String[] args) {
        test();
    }

    public static void test() {
        LinkedList list = new LinkedList();
        list.add("abc");
        list.add(123);
        list.add(3.14);
        list.add(true);
        list.add(new Student("韩梅梅", 19));
        System.out.println(list);
        /*增操作:
                void addFirst(E e):将指定元素插入此列表的开头
                void addLast(E e):将指定元素添加到此列表的结尾 */
        list.addFirst(666);
        list.addLast(999);
        System.out.println(list);
        
        /*获取操作:
                E getFirst():返回此列表的第一个元素。
                E getLast():返回此列表的最后一个元素。*/
        System.out.println(list.getFirst());
        System.out.println(list.getLast());

        /*删除操作:
                 E removeFirst():移除并返回此列表的第一个元素。
                 E removeLast():移除并返回此列表的最后一个元素。*/
        list.removeFirst();
        list.removeLast();
        System.out.println(list);
    }
}

3.3)Vector集合

①Vector是jdk1.0出现的集合,它的增删,查询效率都比较低;
②Vector底层使用可变数组结构,是线程安全的。而ArrayList 的底层是不安全的。
③Vector类已经几乎不再使用

public static void main(String[] args) {
        Vector v = new Vector();
        v.addElement("abc");
        v.addElement(123);
        v.addElement(3.14);
        v.addElement(true);
        v.addElement(null);
        v.addElement(new Student("李雷", 20));
         Iterator it = v.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
 }

第四章、Set集合下的HashSet和LinkedHashSet和TreeSet

4.0)set集合如何比较

①如果hashCode值不一致,则直接存入,如果hashCode是一致的,继续比较equals
②如果equals比较结果为false,则都存入,如果equals比较结果为true,舍弃后者

public class Student {
     String name;
     int age;
    public Student() { }
    public Student(String name, int age) {
        this.name = name;
        this.age = age; }
    @Override
    public String toString() {
        return "{" + name + ", " + age + '}';
    }
    @Override
    public boolean equals(Object o) {
     //调用equals方法时会打印这个
        System.out.println("equals..");
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }
    @Override
    public int hashCode() {
    //调用hashCode方法时会打印这个
        System.out.println("hashCode.");
        return Objects.hash(name, age);
    }
}

//-------------------------分割-------------------------
public class TestHashSet {
    public static void main(String[] args) {
        HashSet set = new HashSet();
	
set.add(new Student("李雷", 20));//添加时调hashCode打印hashCode被调
    
set.add(new Student("李雷", 20));//添加时调hashCode和equals,打印hashCode被调equals被调
System.out.println(set);//打印[{李雷, 20}]

System.out.println(new Student("李雷", 20).hashCode());//hashCode被调,哈希值26613644
System.out.println(new Student("李雷", 20).hashCode());//hashCode被调,哈希值26613644
 System.out.println(new Student("李雷", 21).hashCode());//hashCode被调,哈希值26613645
    }
}

4.1)HashSet集合

①特点:特点:完全无序,且不可以重复,根据计算出现的散列表位置跳跃式的进行存储
②判断是否重复的依据:hashCode、equals

  HashSet set = new HashSet();
        set.add("赵二");
        set.add("张三");
        set.add("李四");
        set.add("王五");
        set.add(1);
        System.out.println(set);
        //打印结果是无序的[李四, 1, 张三, 赵二, 王五]
        //遍历集合
		for (Iterator it = set.iterator(); it.hasNext();) {
			//输出集合中的数据
			System.out.println(it.next()+" ");//李四 1 张三 赵二 王五
		}

4.2)LinkedHashSet集合

①特点:有序的,保证元素不可重复的前提下,维护了一层添加顺序
②判断是否重复的依据:hashCode、equals


 LinkedHashSet set = new LinkedHashSet();
        set.add("张三");
        set.add("张三");
        set.add("李四");
        set.add("王五");
        set.add(6);
        System.out.println(set);
    //添加顺序是存在的[张三, 李四, 王五, 6]
    //遍历集合
        for (Iterator it = set.iterator(); it.hasNext();) {
            //输出集合中的数据
            System.out.print(it.next()+" ");//张三 李四 王五 6
        }

4.3)TreeSet集合

①无序性,保证元素不可重复的前提下,通过Comparable和Comparator接口维护了一层比较关系(下一章会提到)
②判断元素是否重复的标准:如果两个对象是相等的,则认为它们是重复的
③TreeSet集合内部只能存储相同类型的对象

TreeSet set = new TreeSet();
        set.add(789);
        set.add(123);
        set.add(123);
        set.add(456);
        set.add(1);
       System.out.println(set);//比较顺序[1, 123, 456, 789]
        //遍历集合
        for (Iterator it = set.iterator(); it.hasNext();) {
            //输出集合中的数据
        System.out.print(it.next()+" ");//遍历结果1 123 456 789 
        }

4.4)从TreeSet讲到Comparable和Comparator接口

重点:Comparable位于包java.lang下而Comparator接口位于包java.util下,都可以用来实现集合中元素的比较、排序,Comparable接口将比较代码放在自身类中,而Comparator可以在自身类中,也可以在一个独立的类中实现比较。

①使用空参构造方法创建TreeSet集合容器,则存储的对象类型都必须实现了Comparable接口

// 自定义类Employee对象存入到TreeSet容器中 ==> 此类实现Comparable接口
public class Employee implements Comparable<Employee>{
     int id;
     int age;
    public Employee() {   }
    public Employee(int id, int age) {
        this.id = id;
        this.age = age;    }
    @Override
    public String toString() {
        return "Employee{" +"id=" + id +", age=" + age +'}';
    }
    @Override
    public int compareTo(Employee e) {
    //升序
        return this.age - e.age;    }
}


//-------------------------------------------------
// 使用空参构造方法创建TreeSet集合容器,则存储的对象类型都必须实现了Comparable接口
  TreeSet set = new TreeSet();
        set.add(new Employee(1, 30));
        set.add(new Employee(2,  22));
        set.add(new Employee(3, 36));
        System.out.println(set);
//比较age打印结果升序[Employee{id=2, age=22}, Employee{id=1, age=30}, Employee{id=3, age=36}]

②使用带参构造方法创建TreeSet集合容器,参数位置传入一个Comparator接口的实现类对象即可

//圆类
public class Circle {
    private double radius;
    public Circle(double radius) {
        this.radius = radius;    }
    public Circle() {    }
    public double getRadius() {
        return radius;
    }
    public void setRadius(double radius) {
        this.radius = radius;
    }
@Override
    public String toString() {
        return "{"  + radius +
                '}';
    }
}
//------------------------------------------------
//半径比较器类
public class RadiusComparator implements Comparator<Circle> {
    @Override
    public int compare(Circle c1, Circle c2) {
        //降序
        return (int) (c2.getRadius() - c1.getRadius());
    }
}
//------------------------------------------------
 //自定义类Circle对象存入到TreeSet容器中 ==> 使用带参构造创建TreeSet容器对象,参数位置传入一个Comparator接口的实现类对象即可
        TreeSet set = new TreeSet(new RadiusComparator());
        set.add(new Circle(4.0));
        set.add(new Circle(6.0));
        set.add(new Circle(1.0));
        set.add(new Circle(5.0));
        set.add(new Circle(2.0));
        set.add(new Circle(3.0));
        System.out.println(set);
//打印结果[{6.0}, {5.0}, {4.0}, {3.0}, {2.0}, {1.0}]

第五章、Map接口和HashMap集合

4.1)

4.2)

4.3)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/658785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【系统开发】尚硅谷 - 谷粒商城项目笔记(一):项目准备工作

文章目录 项目准备工作人人开源搭建后台管理系统数据库搭建前端项目搭建后端模块代码生成 项目准备工作 人人开源搭建后台管理系统 码云搜索人人开源 renren-fast-vue&#xff1a;前端 renren-generator&#xff1a;代码生成器 renren-fast&#xff1a;后台管理系统 用git…

系统设计蓝图:终极指南

系统设计蓝图&#xff1a;终极指南 设计开发一个健壮的、可扩展的、高效的系统可以是令人望而生畏. 但是&#xff0c;了解关键概念和组件可以使流程更易于管理。在这篇博文中&#xff0c;我们将探索基本的系统设计组件&#xff0c;例如 DNS、负载平衡、API 网关等&#xff0c;以…

python详解(7)——进阶(1):排序算法

目录 &#x1f3c6;一、前言 &#x1f3c6;二、什么是算法&#xff08;简单&#xff09; &#x1f6a9;1、算法 &#x1f6a9;2、排序算法 &#x1f3c6;三、冒泡排序&#xff08;中等&#xff09; &#x1f3c6;四、快速排序&#xff08;困难&#xff09; &#x1f3c6;五&…

Android Studio 提高SDK下载速度

我们在下载Android SDK的时候&#xff0c;经常会出现下载失败的情况&#xff0c; 报android sdk manager not installing components之类的错误。 要如何加快SDK的下载速度呢 ? 我们可以通过修改Host来实现 关闭Android Studio的代理 首先&#xff0c;我们要关闭Android Stu…

华为HCIA备考 易错题整理 PART1

1.IEEE802.1Q定义的 VLAN 帧格式中VLAN ID总共有多少bit 答&#xff1a;12 2.NAPT允许多个私有IP地址通过不同的端口号映射到同一个公有IP地址上&#xff0c;且不需要做任何关于端口号的配置。 3.IEEE802.1Q定义的VLAN帧总长度为多少字节&#xff1f; 答&#xff1a;4 4.关于…

10种实用的Prompt技巧图解

收集整理了prompt engineering的10种实用技巧&#xff0c;以图解的方式解释了它们的主要原理。 本文追求以极简风格逼近这些方法的第一性原理&#xff0c;把黑话翻译成人话&#xff0c;并使用图片范例进行说明。 同时也加入了一些自己的理解&#xff0c;如有出入欢迎指正。 一&…

掌握Python的X篇_3_Python的两种编程方式:交互式与脚本式

掌握Python的X篇_3_Python的两种编程方式&#xff1a;交互式与脚本式 1. 交互式编程2. 脚本式编程3. 其他补充3.1 python源码文件后缀的问题3.2 关于原生工县和开发工具的选择 Python有两种编程方式&#xff1a; 交互式编程:写一行python语句&#xff0c;马上运行一行&#xf…

15-1.创建与引用自定义组件

目录 1 创建自定义组件 2 引用自定义组件 2.1 局部引用 2.2 全局引用 3 自定义组件的样式 1 创建自定义组件 在项目根目录下创建components&#xff0c;然后在components中创建 自定义组件名称 的文件夹&#xff0c;然后再自定义组件名称的文件夹中点击 新建Compon…

人体姿态估计技术的理解(Human Pose Estimination)

本人毕设题目是人体姿态估计技术的相关课题&#xff0c;本人按照自己对人体姿态估计技术的学习和理解进行论述&#xff0c;如有不足&#xff0c;请大家指正&#xff01;&#xff01;&#xff01; 首先讨论一个问题&#xff1a;什么是姿态估计? “姿势估计?……姿势这个词对…

管理类联考——英语二——知识篇——写作——题目说明——A节

MBA&#xff0c;MPA&#xff0c;MPAcc管理类联考英语写作部分由A&#xff0c;B两节组成&#xff0c;主要考查考生的书面表达能力。共2题&#xff0c;25分。A节要求考生根据所给情景写出约100词(标点符号不计算在内)的应用文&#xff0c;包括私人和公务信函、通知、备忘录等。共…

elasticsearch安装dynamic-synonym插件

elasticsearch安装dynamic-synonym插件 ​ 今天就来和大家讲讲如何在es中安装dynamic-synonym插件&#xff0c;首先我们需要去github上下载与es版本对应的插件&#xff0c;一般github上基本都是本地词库和远程文本词库的&#xff0c;在gitee上可以找到采用数据库作为词库的源码…

就Python的发展前景、就业薪资、应用领域来看,你还有什么理由不学Python!

Python作为人工智能和数据分析第一语言&#xff0c;使得Python程序员成了当前人才市场的“抢手货”&#xff0c;工资待遇也水涨船高。 那么Python到底是什么&#xff1f;Python发展前景好么&#xff1f;Python容易学么&#xff1f;工资高么&#xff1f;技术小白适合学习么&…

【统信uos-server-20-1060e---详细安装openGauss】

【统信uos-server-20-1060e---详细安装openGauss】 &#x1f53b; 一、前言&#x1f53b; 一、安装前准备&#x1f530; 1.1 openGauss安装包下载&#x1f530; 1.2 安装环境准备⛳ 1.2.1 硬件环境要求⛳ 1.2.2 软件环境要求⛳ 1.2.3 软件依赖要求⛳ 1.2.4 关闭操作系统防火墙、…

如何在Allegro软件中进行射频微波电路设计?

随着时代高速发展&#xff0c;射频微波电路开始成为当代电子工程师在高频领域面临的重要挑战之一&#xff0c;如何提高设计效率&#xff0c;合理设计出一个优秀的射频微波产品&#xff0c;是很多电子工程师最头痛的问题&#xff0c;下面本文将聊聊如何通过Allegro软件设计吃优秀…

AI服务的并发处理【Python】

有一段时间&#xff0c;我专注于机器学习的研究方面&#xff0c;为不同的任务开发定制的机器学习解决方案。 但是最近&#xff0c;新项目进来了&#xff0c;有时自己负责初始部署比寻求其他开发人员的帮助更快。 我发现了几个在规模、易用性、定价等方面不同的部署选项。 今天…

SSM酒店后台管理系统

主要功能 管理员权限登录&#xff1a; ①首页展示当前时间信息&#xff0c;Layui框架实现的滚动图等布局 ②住客管理&#xff1a;住客入驻、住客列表的增删改查操作 ③房间管理&#xff1a;对房间进行相关的操作&#xff0c;详细信息、更新状态等 ④会员管理&#xff1a;新增会…

Mysql索引的应用

文章目录 一、索引介绍1. 索引的概念2. 索引的作用与副作用2.1 索引的作用2.2 索引的副作用2.3 如何实现索引 3. 创建索引的原则依据4. 索引的分类和创建4.1 普通索引直接创建索引修改表方式创建创建表的时指定索引 4.2 唯一索引直接创建唯一索引修改表方式创建创建表的时候指定…

Linux-- vi / vim 编辑器

目录 vi \ vim 编辑器的三种编辑模式 vi \ vim 的使用 模式的切换 命令模式下的命令 底线模式 vi \ vim 是visual interface 的简称, 是linux中的经典文本编辑器, 同图形化界面中的文本编辑器一样, 但是vi是使用命令行来对文本进行编辑的最好选择 vim是vi的加强版本, 兼容vi的…

15-2.自定义组件的数据

目录 1 data与method 2 properties 2.1 基本使用 2.2 properties在小程序中可读可写 2.3 对properties使用setData() 3 数据监听器 observers 3.1 基本使用 3.2 同时监听多个变量 3.3 监听对象中属性某个属性的变化 3.4 监听对象中所有属性 4 纯数据字段…

【CSS】属性书写顺序

1.布局定位属性&#xff1a; display&#xff08;元素类型建议第一个&#xff09; position float&#xff08;浮动&#xff09; clear visibility overflow 2.自身属性&#xff1a; width height margin&#xff08;外边距&#xff09; …