由浅到深认识Java语言(29):集合

news2024/11/25 11:32:00

该文章Github地址:https://github.com/AntonyCheng/java-notes

在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!

上一章:由浅到深认识Java语言(28):集合

40.集合

Map

Map接口是键值对集合的一个基本接口,是双列集合的顶级接口,没有父接口;

键值对解释:就是由键和值组成的一对关系,键就是 Key,值就是 Value,通过键就能找到值

键不可以重复,但是值可以重复;

主要实现类:HashMap 类 增删查改

  • get(Key k) 查询单个值,返回的就是 Key 对应的 Value,System.out.println 查询整个 Map;

  • put(Key k,Value v) 增加 Map 中的键值对;该方法一般返回 value 的数据类型,返回内容为 null,但是当 put 进重复的 key 时,会覆盖原有键所对应的 value 值;

    Student 类:

    package top.sharehome.Bag;
    
    public class Student {
    	private String name;
    	private int age;
    	public Student() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    	public Student(String name, int age) {
    		super();
    		this.name = name;
    		this.age = age;
    	}
    	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;
    	}
    	@Override
    	public String toString() {
    		return "Student [name=" + name + ", age=" + age + "]";
    	}	
    }
    

    Demo 类:

    package top.sharehome.Bag;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class Demo {
    	public static void main(String[] args) {
    		Map map = new HashMap();
    		Student stu1 = new Student("xiaoming", 20);
    		Student stu2 = new Student("xiaozhang", 21);
    		Student stu3 = new Student("xiaochen", 22);
    		map.put(001, stu1);
    		map.put(002, stu2);
    		map.put(003, stu3);
    		Object object = map.get(001);
    		System.out.println(object);
    	}
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • remove(Key k) 删除该 Key 所对应的键值对,并且返回该键值对,当然 clear() 能够实现删除整个Map;

    Student 类:

    package top.sharehome.Bag;
    
    public class Student {
    	private String name;
    	private int age;
    	public Student() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    	public Student(String name, int age) {
    		super();
    		this.name = name;
    		this.age = age;
    	}
    	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;
    	}
    	@Override
    	public String toString() {
    		return "Student [name=" + name + ", age=" + age + "]";
    	}	
    }
    

    Demo 类:

    package top.sharehome.Bag;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class Demo {
    	public static void main(String[] args) {
    		Map map = new HashMap();
    		Student stu1 = new Student("xiaoming", 20);
    		Student stu2 = new Student("xiaozhang", 21);
    		Student stu3 = new Student("xiaochen", 22);
    		map.put(001, stu1);
    		map.put(002, stu2);
    		map.put(003, stu3);
    		Object remove = map.remove(001);
    		System.out.println(remove);
    		System.out.println(map);
    	}
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • put(Key k,Value v) 不仅可以增加内容,还可以通过输入要改的键来修改值;

    Student 类:

    package top.sharehome.Bag;
    
    public class Student {
    	private String name;
    	private int age;
    	public Student() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    	public Student(String name, int age) {
    		super();
    		this.name = name;
    		this.age = age;
    	}
    	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;
    	}
    	@Override
    	public String toString() {
    		return "Student [name=" + name + ", age=" + age + "]";
    	}	
    }
    

    Demo 类:

    package top.sharehome.Bag;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class Demo {
    	public static void main(String[] args) {
    		Map map = new HashMap();
    		Student stu1 = new Student("xiaoming", 20);
    		Student stu2 = new Student("xiaozhang", 21);
    		map.put(001, stu1);
    		map.put(002, stu2);
    		System.out.println("map = " + map);
    		map.put(001, stu2);
    		System.out.println("修改后map = " + map);
    	}
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • keySet() 将 Map 中所有的键保存在一个数组里面,整体返回出来;

    Student 类:

    package top.sharehome.Bag;
    
    public class Student {
    	private String name;
    	private int age;
    	public Student() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    	public Student(String name, int age) {
    		super();
    		this.name = name;
    		this.age = age;
    	}
    	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;
    	}
    	@Override
    	public String toString() {
    		return "Student [name=" + name + ", age=" + age + "]";
    	}	
    }
    

    Demo 类:

    package top.sharehome.Bag;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    public class Demo {
    	public static void main(String[] args) {
    		Map map = new HashMap();
    		Student stu1 = new Student("xiaoming", 20);
    		Student stu2 = new Student("xiaozhang", 21);
    		Student stu3 = new Student("xiaochen", 22);
    		map.put(001, stu1);
    		map.put(002, stu2);
    		map.put(003, stu3);
    		Set keySet = map.keySet();
    		System.out.println(keySet);
    	}
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • containKey(K) 判断集合是否包含这个键,包含返回 true;

    示例如下:

    package top.sharehome.BigJava;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class Demo {
        public static void main(String[] args) {
            Map<Integer,String> m = new HashMap<>();
            m.put(1,"xiaohong");
            m.put(2,"xiaoming");
            m.put(3,"xiaochen");
            m.put(4,"xiaofang");
            m.put(5,"xiaoying");
            boolean b1 = m.containsKey(3);
            boolean b2 = m.containsKey(6);
            System.out.println(b1);
            System.out.println(b2);
        }
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • containValue(V) 判断集合是否包含这个值,包含返回 true;

    示例如下:

    package top.sharehome.BigJava;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class Demo {
        public static void main(String[] args) {
            Map<Integer,String> m = new HashMap<>();
            m.put(1,"xiaohong");
            m.put(2,"xiaoming");
            m.put(3,"xiaochen");
            m.put(4,"xiaofang");
            m.put(5,"xiaoying");
            boolean b1 = m.containsValue("xiaohong");
            boolean b2 = m.containsValue("xiaoli");
            System.out.println(b1);
            System.out.println(b2);
        }
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • size() 返回集合长度,Map集合中键值对的个数;

    主要是用来判断该Map是否为空;

    示例如下:

    package top.sharehome.BigJava;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class Demo {
        public static void main(String[] args) {
            Map<Integer,String> m = new HashMap<>();
            m.put(1,"xiaohong");
            m.put(2,"xiaoming");
            m.put(3,"xiaochen");
            m.put(4,"xiaofang");
            m.put(5,"xiaoying");
            int i = m.size();
            System.out.println(i);
        }
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • value() Map集合中的所有的值拿出存储到 Collection<V> 集合中

    该方法的返回值就是一个Collection,所以不能用它的实现类去接收,我们也不必考虑它的转换过程,但一定要跟上泛型;;

    示例如下:

    package top.sharehome.BigJava;
    
    import java.util.*;
    
    public class Demo {
        public static void main(String[] args) {
            Map<Integer,String> m = new HashMap<>();
            m.put(1,"xiaohong");
            m.put(2,"xiaoming");
            m.put(3,"xiaochen");
            m.put(4,"xiaofang");
            m.put(5,"xiaoying");
            Collection<String> coll = m.values();
            System.out.println(coll);
        }
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

遍历Map
方式一(常用)

方法解释:

  • 首先要有一个 Map 集合,只要我们能够拿到所有的键,就可以让我们返回所有对应的值;
  • 然后通过 map.ksySet() 方法获取所有的键,返回并包装成一个 Collection 接口下的 Set 子接口,此时我们就可以根据遍历 Collection 的迭代器方法来遍历该 Map;
  • 然后获得一个迭代器,在循环语句中,将所有 key 赋值为每一次循环的 iterator.next(),再通过 Map.get(key) 方法获得所有 key 所对应的 value;
  • 最后输出出来;

示例如下:

package top.sharehome.Bag;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Demo {
	public static void main(String[] args) {
		Map map = new HashMap();
		map.put(1, "a");
		map.put(2, "b");
		map.put(3, "c");
		map.put(4, "d");
		map.put(5, "e");
		//map集合里放的是键值对,Key和Value的映射关系
		//获得Map中所有的键,就能够遍历出所有的值;  ==>  map中的 keySet() 方法
		Set keySet = map.keySet();
		//返回一个包含所有键的 Set ,即可获得该 Set 的迭代器
		Iterator iterator = keySet.iterator();
		//步骤和 Collection 迭代方式一样
		while(iterator.hasNext()) {
			Object key = iterator.next();
			//这里要通过 map 中的 get() 方法得到每一个键所对应的值
			Object value = map.get(key);
			System.out.println("Key = "+key+" ==> value = "+value);
		}
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方式二

方法解释:

通过 Map 集合的 values() 方法获得集合中所有的值;

该方法将所有的值放入一个容器并返回一个 Collection 接口下的 List 子接口(因为 Map 集合中的值可以重复)

示例如下:

package top.sharehome.Bag;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Demo {
	public static void main(String[] args) {
		Map map = new HashMap();
		map.put(1, "a");
		map.put(2, "b");
		map.put(3, "c");
		map.put(4, "d");
		map.put(5, "e");
		map.put(6, "a");
		Set keys = map.keySet();
		Collection values = map.values();
		System.out.println(keys);
		System.out.println(values);
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方式三(须知)

方法解释:

使用 Map 中的 entrySet() 内部类,能够直接获取 Map 中的所有映射关系(Entry),并且返回一个 Set 接口,这个接口中存储的元素比较特殊,存储的是 Map 集合中键值对映射关系的对象,内部接口 Map.Entry<K,V> ;

然后又可以用 Set 接口中的迭代器方法做遍历,参见方式一;

映射关系相关的接口 Map.Entry<K,V>

  • 接口常见方法:

    equals(Object O) 比较指定对象与该映射项是否相等;

    getKey() 返回该映射项对应的键;

    getValue() 返回该映射项对应的值;

    setValue(Value V) 用指定的值替换该映射项的值;

  • 方法示例:

    package top.sharehome.Bag;
    
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
    
    public class Demo {
    	public static void main(String[] args) {
    		Map map = new HashMap();
    		Map mapTest = new HashMap();
    		map.put(1, "a");
    		map.put(2, "b");
    		map.put(3, "c");
    		map.put(4, "d");
    		map.put(5, "e");
    		map.put(6, "a");
    		mapTest.putAll(map);
    		Set entrySet1 = map.entrySet();
    		Set entrySet2 = mapTest.entrySet();
    		Iterator iterator1 = entrySet1.iterator();
    		Iterator iterator2 = entrySet2.iterator();
    		Object next1 = iterator1.next();
    		Object next2 = iterator2.next();
    		//以下判断是向下转型
    		if(next1 instanceof Map.Entry) {
    			if(next2 instanceof Map.Entry) {
    				//以下两条是强转,因为 Object 中没有 entry 里的方法
    				Entry entry1 = (Entry) next1;
    				Entry entry2 = (Entry) next2;
    				boolean equals = entry1.equals(entry2);
    				Object key1 = entry1.getKey();
    				Object key2 = entry2.getKey();
    				Object value1 = entry1.getValue();
    				Object value2 = entry2.getValue();
    				System.out.println("equals = " + equals);
    				System.out.println("key1 = " + key1);
    				System.out.println("key2 = " + key2);
    				System.out.println("value1 = " + value1);
    				System.out.println("value2 = " + value2);
    				Object setValue1 = entry1.setValue("A");
    				Object setValue2 = entry2.setValue("B");
    				System.out.println("setValue1 = " + setValue1);
    				System.out.println("wetValue2 = " + setValue2);
    			}
    		}
    	}
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方式三示例如下:

package top.sharehome.BigJava;

import java.util.*;

public class Demo {
    public static void main(String[] args) {
        Map<Integer,String> m = new HashMap<>();
        m.put(1,"xiaohong");
        m.put(2,"xiaoming");
        m.put(3,"xiaochen");
        m.put(4,"xiaofang");
        m.put(5,"xiaoying");
        Set<Map.Entry<Integer,String>> s = m.entrySet();
        Iterator<Map.Entry<Integer,String>> it = s.iterator();
        while (it.hasNext()){
            Map.Entry<Integer,String> e = it.next();
            Integer key = e.getKey();
            String value = e.getValue();
            System.out.println("key = "+key+" ==> value = "+value);
        }
    }
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

HashMap(常用)
  • HashMap集合特点
    • 是哈希表结构
    • 为了保证唯一性,用于键的对象,必须重写 hashCode 和 equals 方法,不然会出现该对象作为键时,插入内容相同的对象而会被判定成两个不一样的对象;
    • 线程不安全集合,运行速度快
    • 集合允许使用 null 作为键或者值
LinkedHashMap

继承于 HashMap ,实现 Map 接口,LinkedHashMap底层实现原理是哈希表,双向连,存取有序,其他的特性和它的父类 HashMap 一样;

示例如下:

我们从键盘获取,来存储 3 个学生对象;

package top.sharehome.BigJava;

import java.util.*;

public class Demo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生个数:");
        int stuNum = sc.nextInt();
        Map<Integer, String> m = MyScan(stuNum);
        System.out.println("下面是第一种遍历方式:");
        Set<Integer> set1 = m.keySet();
        Iterator<Integer> it1 = set1.iterator();
        while (it1.hasNext()) {
            int key = it1.next();
            String value = m.get(key);
            System.out.println("key = " + key + " ==> value =" + value);
        }
        System.out.println("下面是第二种遍历方式:");
        Set<Map.Entry<Integer, String>> set2 = m.entrySet();
        Iterator<Map.Entry<Integer, String>> it2 = set2.iterator();
        while (it2.hasNext()) {
            Map.Entry<Integer, String> e = it2.next();
            int key = e.getKey();
            String value = e.getValue();
            System.out.println("key = " + key + " ==> value =" + value);
        }
    }

    public static LinkedHashMap<Integer, String> MyScan(int num) {
        Scanner sc = new Scanner(System.in);
        LinkedHashMap<Integer, String> m = new LinkedHashMap<>();
        for (int i = 0; i < num; i++) {
            System.out.println("请输入第" + (i + 1) + "个学生的序号和名字:");
            int stuNum = sc.nextInt();
            String name = sc.next();
            m.put(stuNum, name);
        }
        sc.close();
        return m;
    }
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Hashtable

这是 Map 接口的实现类,这个类诞生于 JDK1.0 版本,而 Map 接口诞生于 JDK1.2 版本,所以 Hashtable 类从 JDK1.2 开始,改进为实现 Map 接口;

  • Hashtable 类的特点
    • 底层数据结构是哈希表
    • 线程安全的,运行速度慢,被更加先进的 HashMap 取代
    • 不允许 null 值和 null 键
Vector

List 接口的实现 Vector,命运和 Hashtable 一样;

  • Vector 类的特点
    • 底层实现结构式数组
    • 数组的默认容量是 10,每次扩容是原来的两倍
    • 线程安全,运行速度,被 ArrayList 取代
TreeMap
  • TreeMap 特点

    • 底层实现是红黑树结构(添加查询速度都是比较快的)
    • 存储到 TreeMap 中的元素会对键进行排序,排序的依据:
      • 对象的自然顺序,作为键的对象,实现了接口 Comparable
      • 自己提供比较器,实现接口 Comparator (优先级高)
    • 线程不安全,运行速度快
  • 示例如下:

    package top.sharehome.BigJava;
    
    import java.util.*;
    
    public class Demo {
        public static void main(String[] args) {
            Map<Student, Integer> m = new TreeMap<>(new MyCom());
            m.put(new Student("xiaochen", 21), 1);
            m.put(new Student("xiaoyang", 22), 1);
            m.put(new Student("xiaohong", 19), 1);
            Set<Student> set = m.keySet();
            Iterator<Student> it = set.iterator();
            while (it.hasNext()) {
                Student key = it.next();
                int value = m.get(key);
                System.out.println("key = " + key + " ==> value = " + value);
            }
        }
    }
    
    class MyCom implements Comparator<Student> {
        public int compare(Student o1, Student o2) {
            return o1.getAge()-o2.getAge();
        }
    }
    
    class Student {
        private String name;
        private int age;
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public int getAge() {
            return age;
        }
    
        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (!(o instanceof Student)) return false;
    
            Student student = (Student) o;
    
            if (getAge() != student.getAge()) return false;
            return getName() != null ? getName().equals(student.getName()) : student.getName() == null;
        }
    
        @Override
        public int hashCode() {
            int result = getName() != null ? getName().hashCode() : 0;
            result = 31 * result + getAge();
            return result;
        }
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Properties
  • Properties 集合特点

    • 继承 Hashtable,实现 Map 接口

    • 底层是哈希表结构

    • 线程是安全的,运行速度慢

    • 这个集合没有泛型的写法,键和值的数据类型锁定为 String 类型

    • 这个集合有自己的特有方法

      • setProperties(String key,String value) 存放元素,不能用 put ,因为 put 的泛型被取消掉

        示例如下:

        package top.sharehome.BigJava;
        
        import java.util.Properties;
        
        public class Demo {
            public static void main(String[] args) {
                Properties p = new Properties();
                p.setProperty("a", "1");
                p.setProperty("b", "1");
                p.setProperty("c", "1");
                System.out.println(p);
            }
        }
        

        打印效果如下:

        外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

      • getProperties(String Key) 获取value

        示例如下:

        package top.sharehome.BigJava;
        
        import java.util.Properties;
        
        public class Demo {
            public static void main(String[] args) {
                Properties p = new Properties();
                p.setProperty("a", "1");
                p.setProperty("b", "2");
                p.setProperty("c", "3");
                System.out.println(p.getProperty("a"));
                System.out.println(p.getProperty("b"));
                System.out.println(p.getProperty("c"));
            }
        }
        

        打印效果如下:

        外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

      • stringPropertyNames() 返回一个 Set 集合,等同于 Map 里的 keySet()

        示例如下:

        package top.sharehome.BigJava;
        
        import java.util.Iterator;
        import java.util.Properties;
        import java.util.Set;
        
        public class Demo {
            public static void main(String[] args) {
                Properties p = new Properties();
                p.setProperty("a", "1");
                p.setProperty("b", "2");
                p.setProperty("c", "3");
                Set<String> s = p.stringPropertyNames();
                Iterator<String> it = s.iterator();
                while (it.hasNext()){
                    System.out.println(it.next());
                }
            }
        }
        

        打印效果如下:

        外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • 此集合可以和 IO 流对象结合使用,实现数据的持久存储

    • 和 IO 流相关的方法:load() 输入流;

  • 遍历 Properties 集合

    示例如下:

    package top.sharehome.BigJava;
    
    import java.util.Iterator;
    import java.util.Properties;
    import java.util.Set;
    
    public class Demo {
        public static void main(String[] args) {
            Properties p = new Properties();
            p.setProperty("a", "1");
            p.setProperty("b", "2");
            p.setProperty("c", "3");
            Set<String> s = p.stringPropertyNames();
            Iterator<String> it = s.iterator();
            while (it.hasNext()){
                String key =  it.next();
                String value = p.getProperty(key);
                System.out.println("key = "+key+" ==> value ="+value);
            }
        }
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下一章:由浅到深认识Java语言(30):集合

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

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

相关文章

光致发光荧光量子产率测试光纤光谱仪

光致发光荧光量子产率测试系统是一种用于测量材料发光效率的高精度设备&#xff0c;它通过光致发光方法来确定样品的发射效率。光致发光荧光量子产率测试系统不仅提供了一种高效、可靠的测量手段&#xff0c;而且对于提升科学研究和工业应用中的发光材料性能具有重要作用。通过…

Python:基础语法

一、import与from.....import 有时候我们需要使用一些第三方库或包时&#xff0c;我们就需要通过import或from.....import导入模块。 # 导入库 import sys print("hello,world") 当我们自己写了些函数&#xff0c;在其他py文件&#xff0c;我们也可以通过from.....im…

【Java程序设计】【C00361】基于Springboot的考勤管理系统(有论文)

基于Springboot的考勤管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 &#x1f345;文末点击卡片获取源码&#x1f345; 开发环境 运行环境&#xff1a;推荐jdk1.8&#xff1b; 开发工具&#xff1a;eclipse以及idea&…

「10」文本(GDI+):添加文字,可设置背景添加移动效果

「10」文本&#xff08;GDI&#xff09;添加文字&#xff0c;可设置背景添加移动效果 在OBS软件里&#xff0c;通过来源组件「文本&#xff08;GDI&#xff09;」&#xff0c;您可以添加任意您想要呈现的文字&#xff0c;在直播窗口中显示&#xff0c;它可以是提示语、广告词、…

SQLServer SEQUENCE用法

SEQUENCE&#xff1a;数据库中的序列生成器 在数据库管理中&#xff0c;经常需要生成唯一且递增的数值序列&#xff0c;用于作为主键或其他需要唯一标识的列的值。为了实现这一功能&#xff0c;SQL Server 引入了 SEQUENCE 对象。SEQUENCE 是一个独立的数据库对象&#xff0c;用…

python.类

1.类用class定义 name等是属性 是成员变量 定义完类了要定义对象 class Student: #定义了一个Student的类nameNoneageNonegenderNonesdu1Student() #创建了一个Student类的对象 sdu1.nameleo sdu1.age20 sdu1.gendermaleprint(sdu1.name) print(sdu1.age) print(sdu1.…

Day21|二叉树part07:530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

530. *二叉搜索树的最小绝对差&#xff08;双指针题型&#xff09; 众所周知二叉搜索树的中序遍历序列是一个有序数组&#xff0c;因此最基本的方法就是遍历得到中序序列再进行计算&#xff0c;实际上可以用双指针法&#xff0c;记录中序遍历前一个指针和当前指针的差值&#…

一个bitter组织下载器样本分析

BITTER 该组织最早在2016由美国安全公司Forcepoint进行了披露&#xff0c;并且命名为“BITTER”&#xff0c;同年国内友商360也跟进发布了分析报告&#xff0c;命名为“蔓灵花” 样本分析 MD5&#xff1a;806626d6e7a283efffb53b3831d53346 vt:看文件名判断是伪装成pdf的自解…

小学生古诗文大会往届真题测一测(来自主办方)和非常详细的解析

新学期开学一眨眼已经过了一个多月了&#xff0c;有家长朋友开始关心2024年上海市小学生古诗文大会什么时候开始&#xff1f;如何准备小学生古诗文大会&#xff1f;如何激发孩子学习古诗词的兴趣&#xff1f;如何提高小学古诗词和古诗文大会的学习成绩&#xff1f;... 最近&…

YT8531调试记录

总结 还是从设备树&#xff0c;mac驱动&#xff0c;mac驱动对mdio总线的注册&#xff0c;phy驱动 &#xff0c;phy的datasheet&#xff0c;cpu的datasheet 几个方面来看来看 0.确认供电&#xff0c;以及phy的地址(一般会有多个地址&#xff0c;根据相关引脚电平可配置) 1.确…

Linux离线安装mysql,node,forever

PS:本文是基于centos7实现的,要求系统能够查看ifconfig和unzip解压命令, 实现无网络可安装运行 首先现在百度网盘的离线文件包****安装Xftp 和 Xshell 把机房压缩包传到 home目录下****解压unzip 包名.zip 获取IP先获取到 linux 主机的ip ifconfig Xftp 连接输入IP,然后按照…

CentOS使用Docker部署Halo并结合内网穿透实现公网访问本地博客

文章目录 1. Docker部署Halo1.1 检查Docker版本如果未安装Docker可参考已安装Docker步骤&#xff1a;1.2 在Docker中部署Halo 2. Linux安装Cpolar2.1 打开服务器防火墙2.2 安装cpolar内网穿透 3. 配置Halo个人博客公网地址4. 固定Halo公网地址 本文主要介绍如何在CentOS 7系统使…

搭建本地局域网域名并配置本地的mqtt服务器

1. 第一步&#xff1a; 首先准备一台windows电脑&#xff0c;安装 Technitium DNS Server 链接如下&#xff1a; Technitium DNS Server | An Open Source DNS Server For Privacy & Security 启动 start 然后进入 http://localhost:5380/ 下载完成之后&#xff0c;需要…

内网端口如何映射到外网?

内网端口映射到外网是一项重要的网络技术&#xff0c;它可以实现在任何网络环境下远程访问和管理内网设备。在复杂的网络环境中&#xff0c;内网设备通常无法直接被外网访问&#xff0c;而内网端口映射技术可以解决这个问题。本文将介绍一种名为【天联】的组网产品&#xff0c;…

最小割问题合集,最大权闭合图,最大密度子图,最小权点覆盖,最大权独立子图,OJ练习,代码详解

文章目录 零、回顾1、流网络的割2、最小割问题 一、最小割的应用1.1POJ1966 -- Cable TV Network1.1.1原题链接1.1.2思路分析1.1.3AC代码 1.2ZOJ 2676 Network Wars1.2.1原题链接1.2.2思路分析1.2.3AC代码 1.3OPTM - Optimal Marks1.3.1原题链接1.3.2思路分析1.3.3AC代码 二、最…

VS2022 nuget 无法解析 PackageSourceMapping 已启用,未考虑以下源: nuget.org。

前言&#xff1a; VS中的项目包的指向是 nuget.org&#xff0c;不是本地的下载后包。 解决方法&#xff1a; 把“包源映射”里的全部移除。

tcp/ip是什么意思,tcp/ip协议包含哪几层

TCP/IP是一种网络通信协议&#xff0c;它是互联网所采用的基本协议。TCP/IP协议是由美国国防部高级研究计划局&#xff08;ARPA&#xff09;在上世纪70年代设计开发的&#xff0c;经过多年发展和完善&#xff0c;已成为全球范围内最重要的网络通信协议之一。 首先&#xff0c;让…

Gif动图怎么快速制作?两招教你在线做

Gif动图作为一种实用的图片格式&#xff0c;因为其体积小&#xff0c;画面丰富&#xff0c;所以在各大聊天软件中非常的受欢迎。小伙伴们是不是很好奇这种gif动态图片是如何制作的吧&#xff01;下面&#xff0c;小编就给大家分享两个快速制作gif动画的小技巧&#xff01;不用下…

UI 自动化里面等待方式应用场景!

掌握Selenium 自动化测试的人员都知道Selenium的等待使用场景至关重要&#xff0c;这些等待对于测试自动化稳定性不可或缺的一部分&#xff0c;因为它们确保与 Web 元素的同步交互&#xff0c;从而能够在不同的加载时间和动态页面更改中准确执行测试脚本。 本文将深入探讨 Sel…

黄金近期可以投资吗?看这篇技术分析就够了

黄金价格的走势很大程度上受到美联储货币政策&#xff0c;以及市场对于美联储货币政策预期变化的影响&#xff0c;但不管金价的走势如何改变&#xff0c;现货黄金作为一种可以双向操作的黄金交易工具&#xff0c;都可以帮助投资者在不同的走势中主动出击&#xff0c;在风险可控…