Java-day11(集合)

news2024/11/18 14:52:19

集合

1.集合框架

用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组

  • Java集合可分为CollectionMap两种体系
    在这里插入图片描述

    Collection接口
    Set:元素无序,不可重复的集合----(类似数学中的集合)
    List:元素有序,可重复的集合----("动态"数组)
    Map接口:具有映射关系----(类似数学中的函数)

  • 数组存储对象的缺点:创建后,长度不可变;数组存放的对象的个数不可知

2.Collection接口API

常见的接口API

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;          
import java.util.Iterator;

import org.junit.Test;

public class Test8{
	@Test
	public void testCollection(){
		Collection coll = new ArrayList();   
		//1.size():返回集合中元素的个数
		System.out.println(coll.size());//0
		//2.add(Object obj):向集合中添加一个元素
		coll.add(123);
		coll.add("ABC");
		coll.add(new Object());
		coll.add(true);
		System.out.println(coll.size());//4
		//3.addAll(Collection coll):将形参coll中包含的所有元素添加到当前集合中
		Collection coll1 = Arrays.asList(1,2,3);//添加3个元素到coll1中,coll1长度不可变,且不支持add()、remove()、clear()等方法
		coll.addAll(coll1);
		System.out.println(coll.size());//7
		//查看集合元素
		System.out.println(coll);
		//4.判断集合是否为空
		System.out.println(coll.isEmpty());//false
		//5.clear():清空集合元素
		coll.clear();
		System.out.println(coll.isEmpty());//true
	}

	@Test
	public void testCollection1(){
		Collection coll = new ArrayList();
		coll.add(123);
		coll.add("ABC");
		coll.add(new Object());
		coll.add(true);
		//6.contains(Object obj):判断集合中是否包含指定的obj元素,包含,返回true,不包含,返回false
		//判断的依据:根据元素所在类的equals()方法来判断
		//注意:如果存入集合中的元素是自定义类的对象,要求:自定义类要重写equals()方法
		boolean b1 = coll.contains("ABC");
		System.out.println(b1);//true
		//7.containsAll(Collection coll):判断当前集合中是否包含coll中所有的元素
		Collection coll1 = new ArrayList();
		coll1.add(123);
		coll1.add("ABC");
		boolean b2 = coll.containsAll(coll1);
		System.out.println(b2);//true
		//8.retainAll(Collection coll):求当前集合与coll共有的元素,并返回给当前集合
		coll.retainAll(coll1);
		System.out.println(coll);//[123, ABC]
		//9.remove():删除集合中的obj元素,删除成功,返回true,反之,返回false
		boolean b3 = coll.remove(123);
		System.out.println(b3);
		//10.removeAll(Collection coll):从当前集合中删除包含在coll中的元素
		Collection coll2 = new ArrayList();
		coll2.add("ABC");
		coll2.add("ACE");
		coll.removeAll(coll2);
		System.out.println(coll);//空(上一步后coll只剩ABC元素)

	}
	@Test
	public void testCollection2(){
		Collection coll = new ArrayList();
		coll.add(123);
		coll.add("ABC");
		coll.add(new Object());
		coll.add(true);

		Collection coll1 = new ArrayList();
		coll.add(123);
		coll.add("ABC");
		//11.equals(Collection coll):判断集合中的元素是否完全一样
		//System.out.println(coll.equals(coll1));//false
		//12.hashCode():算出集合哈希值
		//System.out.println(coll.hashCode());
		//13.toArray():将集合转化成数组
		Object[] obj = coll.toArray();
		for(int i = 0;i < obj.length;i++){
			System.out.println(obj[i]);
		}
		//14.iterator():返回一个Iterator接口的实现类,进而实现集合的遍历
		Iterator iterator = coll.iterator();
		System.out.println("开始打印集合元素");
		while(iterator.hasNext()){
			System.out.println(iterator.next());
		}
	}	
}

3.lterator迭代器接口

集合的遍历

方法一:使用lterator迭代器接口实现集合的遍历

正确写法:

public void testCollection2(){
		Collection coll = new ArrayList();   
		coll.add(123);
		coll.add("ABC");
		coll.add(new Object());
		coll.add(true);
Iterator iterator = coll.iterator();
		while(iterator.hasNext()){
			System.out.println(iterator.next());
		}
}

错误写法:

public void testCollection2(){
		Collection coll = new ArrayList();    
		coll.add(123);
		coll.add("ABC");
		coll.add(new Object());
		coll.add(true);
Iterator iterator = coll.iterator();
		while(iterator.Next()= null){
			System.out.println(iterator.next());
		}
		for(Object i:coll){
			System.out.println(i);
		}
}

方法二:通过增强for循环实现集合的遍历

public void testCollection2(){
		Collection coll = new ArrayList(); 
		coll.add(123);
		coll.add("ABC");
		coll.add(new Object());
		coll.add(true);

		for(Object i:coll){
			System.out.println(i);
		}
}

通过增强for循环实现数组的遍历

public void tesFor(){
		String[] str = new String[]{"AA","SS","123"};
		for(String s:str){
			System.out.println(s);      
		}
}

4.Collection子接口:Set接口(存储元素无序,不可重复的集合)

  • 添加进Set中的元素所在的类,一定要 重写equals()和hashCode() 方法

  • 无序性:无序性 != 随机性(无序性是指元素在底层存放位置的无序)

  • 不可重复性:当向Set中添加相同的元素的时候,后面的元素不能添加进去

  • 向Set中添加对象时,首先调用对象所在类的hashCode()方法,计算此对象的哈希值,哈希值决定对象存储位置。若对象要存储的位置没对象,就直接存储进去;若对象要存储的位置有对象,再通过equals()比较这两个对象是否相同(相同则后一个对象无法添加进来,反之则都存储)。

注:hashCode()方法与equals()方法需一致

HashSet(主要实现类)

例:

import java.util.HashSet;
import java.util.Set;

import org.junit.Test;

public class Test{
	@Test
	public void testHashSet(){
		Set set = new HashSet();
		set.add(123);
		set.add(456);
		set.add(new String("AA"));   
		set.add("AA");
		set.add(null);
		System.out.println(set.size());
		System.out.println(set);

	}
	
}

LinkedHashSet

使用链表维护了添加进集合的顺序,当我们遍历此集合时,是按照添加的先后顺序进行遍历。

  • LinkedHashSet插入性能低于HashSet,但在迭代访问却有很好的优势
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.Iterator;

import org.junit.Test;

public class Test11{
	@Test
	public void testHashSet(){
		Set set = new LinkedHashSet();
		set.add(123);
		set.add(456);
		set.add(new String("AA"));   
		set.add("AA");
		set.add(null);//LinkedHashSet可以有null
		//遍历集合
		Iterator iterator = set.iterator();
		while(iterator.hasNext()){
			System.out.println(iterator.next());
		}

	}
	
}

TreeSet

  • 向TreeSet中添加的元素必须是同一类

  • 可以按照添加进集合中的元素的指定的顺序遍历。如String,包装类等按照从小到大的顺序遍历

  • 当自定义类没有实现Comparable接口时,当向TreeSet中添加自定义类对象时,会报ClassCastException的异常

  • TreeSet中添加自定义类对象时有两种排序方式:自然排序和定制排序

    自然排序:要求自定义类实现java.lang.Comparable接口并重写其compareTo(Object obj)方法

    • compareTo()与hashCode()方法及equals()方法三者保持一致

    • 在此方法中,指明按照自定义类的哪个属性排序

    • 向TreeSet中添加元素时,首先按照compareTo()进行比较,一但返回0,虽然两个对象的比较的属性值相同,但是程序会认为这两个对象是相同的,进而使后一个对象无法添加进来

    定制排序

    • compare()与hashCode()方法及equals()方法三者保持一致
    • 详细案例见附件

5.Collection子接口:List接口(存储元素有序,可重复的集合)

添加进List中的元素所在的类,一定要 重写equals() 方法

ArrayList(主要的实现类)

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

public class Test10{
	@Test
	//List常用的方法:增(add(Object obj)),删(remove(int index))改(set(int index,Object obj))查(get(int index))插(add(int index,Object obj))长度(size())
	//List相对于Collection的新增方法
	public void test1(){
		List list = new ArrayList();
		list.add(123);
		list.add(456);
		list.add(789);
		list.add(new String("ACA"));
		list.add(new String("ACE"));            
		System.out.println(list);//[123, 456, 789, ACA, ACE] 
		
		//1.void add(int index,Object obj):在指定的索引位置添加元素
		list.add(0,"SSS");
		System.out.println(list);//[SSS, 123, 456, 789, ACA, ACE] 
		//2.Object get(int index):获取指定位置的元素
		Object obj = list.get(3);
		System.out.println(obj);//789
		//3.boolean addAll(int index,Collection coll):判断向该集合中的指定位置加入集合coll;成功true,失败false;
		List list1 = new ArrayList();
		list1.add(1263);
		list1.add(4566);
		boolean b1 = list.addAll(1,list1);
		System.out.println(b1);//true 
		System.out.println(list);//[SSS, 1263, 4566, 123, 456, 789, ACA, ACE] 
		//4.Object remove(int index):删除指定索引位置的元素
		list.remove(0);
		System.out.println(list);//[1263, 4566, 123, 456, 789, ACA, ACE] 
		//5.Object set(int index,Object obj):设置指定索引位置的元素为obj
		list.set(0, 2222);
		System.out.println(list);//[2222, 4566, 123, 456, 789, ACA, ACE] 
		//6.int indexOf(Object obj):返回第一次出现的指定元素obj在集合中的索引位置,没有返回 -1
		int index = list.indexOf("ACE");
		System.out.println(index);//6 
		//7.int indexOf(Object obj, intstartIndex):返回最后一次出现的指定元素obj在集合中的索引位置,没有返回 -1
		System.out.println(list.lastIndexOf(123));//2 
		list.add(123);
		System.out.println(list.lastIndexOf(123));//7 
		//8.List subList(int fromIdex,int toIndex):返回从fromIdex索引到 toIndex索引位置的集合元素{索引值不能为负,范围左闭右开(fromIdex,toIndex]}
		List a1 = list.subList(2 ,8);
		System.out.println(a1);//[123, 456, 789, ACA, ACE, 123] 
	}
}

LinkedList(对于频繁的插入,删除操作,则建议使用)

Vector(古老的实现类,线程安全,效率低于ArrayList)

练习
在这里插入图片描述
参考答案:略

6.Map接口(存储“键-值”对的数据)

  • 用于保存具有映射关系的数据:Key-Value
  • Map中的key和value都可以是任何引用类型的数据
  • Map中的key用Set来存放,不允许重复(value(用Collection存放)可以重复),所有的Entry(Key-Value对)是用Set存放,不可重复。同一个Map对象所对应的类,须重写hashCode()和equals()方法
  • 常用String类作为Map的"键"
  • Key和Value之间存在单向一对一的关系,即通过指定的key都能找到唯一,确定的value

在这里插入图片描述
虚线实现,实线继承

HashMap(主要实现类)

向HashMap中添加元素时,会调用Key所在类的equals()方法,判断两个Key是否相同,若相同,新老交替(老的Entry被新的Entry覆盖)

Map的主要方法
public class TestMap{
@Test
	public void test1(){
		Map map = new HashMap();          
		
		//1.Object put(Object key,Object value):向Map中添加元素(即Entry:一对完整的键-值对)
		map.put("AA", 223);
		map.put("BB", 223);
		map.put("AA", 227);
		map.put(123, "cc");
		map.put(null, null);
		map.put(new Customer("OO", 33), 99);
		map.put(new Customer("OO", 33), 99);
		
		//2. int size():返回集合长度
		System.out.println(map.size());//5(Key不可重复)
		System.out.println(map);//{AA=227, BB=223, null=null, Customer [name= OO, id=33]=99, 123=cc}
		
		//3.Object remove(Object key):按照指定的Key,删除对应的Entry
		map.remove(123);
		System.out.println(map);//{AA=227, BB=223, null=null, Customer [name= OO, id=33]=99}
		
		//4.void putAll(Map t):将新的Map(t)添加进本map
		Map map1 = new HashMap();
		map1.put(111, 223);
		map1.put(222, 223);
		map.putAll(map1);
		System.out.println(map);//{AA=227, BB=223, null=null, Customer [name= OO, id=33]=99, 222=223, 111=223}
		
		//5.clear():清空
		System.out.println(map1);//{222=223, 111=223}
		map1.clear();
		System.out.println(map1);//{}

		//6.Object get(Object key):获取指定Key的Value值,若无此Key,就返回null
		System.out.println(map.get(999));//null

		//7.boolean containsKey(Object key):
		boolean b1 = map.containsKey("AA");
		System.out.println(b1);//ture

		//8.boolean containsValue((Object Value):判断此集合中是否有值为Value的Entry,有返回ture,没有返回false;
		boolean b2 = map.containsValue(227);//此时map中有一个值为227的Entry
		System.out.println(b2);//ture
		map.remove("AA", 227);
		boolean b3 = map.containsValue(227);//此时map中没有值为227的Entry
		System.out.println(b3);//false

		//9.boolean isEmpty():判断集合是否为空
		boolean b4 = map.isEmpty();
		System.out.println(b4);//false

		//10.boolean equals(Object obj):判断此集合是否完全等于集合obj(即判断本集合是否与obj集合是否一样)
		map1.put("aa", 234);
		map1.put("AA", 234);
		boolean b5 = map.equals(map1);
		System.out.println(b4);//false
	}
}
Map的遍历
public class TestMap{
@Test
	public void test2(){
		Map map = new HashMap();       
		map.put("AA", 223);
		map.put("BB", 223);
		map.put(123, "cc");
		map.put(null, null);
		map.put(new Customer("OO", 33), 99);

		//1.Set KeySet():遍历Key集
		Set set = map.keySet();
		for(Object obj : set){
			System.out.println(obj);
		}
		//AA BB null Customer [name= OO, id=33] 123

		//2.Collection values():遍历Value集
		Collection coll = map.values();
		Iterator i = coll.iterator();
		while(i.hasNext()){
			System.out.println(i.next());
		}
		//223 223 null 99 cc

		//3.Set entrySet():遍历Key-Value集
		Set entry = map.entrySet();
		for(Object obj : entry){
			//直接打印
			System.out.println(obj);
			//转变类型通过get方法遍历
			Map.Entry entrily = (Map.Entry)obj;
			System.out.println(entrily.getKey() + "=====>" + entrily.getValue());

		}
		//AA=223 BB=223 null=null Customer [name= OO, id=33]=99 123=cc

		//4.通过遍历Key集进而遍历Value集
		Set set1 = map.keySet();
		for(Object obj : set1){
			System.out.println(obj + "=====" + map.get(obj));
		}
		//AA=====223 BB=====223 null=====null Customer [name= OO, id=33]=====99 123=====cc
	}
}

LinkedHashMap

使用链表维护添加进Map中的顺序,遍历时,按照添加的顺序遍历

public class TestMap{
@Test
	public void test3(){
		Map map = new LinkedHashMap();
		map.put("AA", 223);
		map.put("BB", 223);
		map.put(123, "cc");
		map.put(null, null);           
		map.put(new Customer("OO", 33), 99);

		Set entry = map.entrySet();
		for(Object obj : entry){
			System.out.println(obj);
		}
	}
}

TreeMap

  • 按照添加进Map中的元素的Key的指定属性进行排序,要求:key必须是同一类的对象

  • 针对Key有自然排序与定制排序

  • 自然排序(需重写compareTo方法)
    例:

 public class Customer implements Comparable{               
	private Integer id;
	private String name;

	public Integer getId(){
		return id;
	} 
	public void setId(Integer id){
		this.id = id;
	}
	public void setName(String name){
		this.name = name;
	}
	public String getName(){
		return name;
	}
	public Customer(String name,Integer id){
		super();
		this.name = name;
		this.id = id;
	}
	public Customer(){
		super();
	}
	@Override
	public String toString(){
		return "Customer [name= " + name + ", id=" + id + "]";
	}
	@Override
	public int hashCode(){
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj){
		if(this == obj)
			return true;
		if(obj == null)
			return false;
		if(getClass() != obj.getClass())
			return false;
		Customer other = (Customer)obj;
		if(id == null){
			if(other.id != null)
				return false;
		}else if(!id.equals(other.id))
			return false;
		if(name == null){
			if(other.name != null)
				return false;
		}else if(!name.equals(other.name))
			return false;
		return true;
	}
	@Override
	public int compareTo(Object o){//先按ID,后按名字排序
		if(o instanceof Customer){
			Customer c = (Customer)o;
			int i = this.id.compareTo(c.id);
			if(i == 0){
				return this.name.compareTo(c.name);
			}else{
				return i;
			}
		}
		return 0;
	}
}
javapublic void test1(){
	@Test
	public void test4(){
		Map map = new TreeMap();
		map.put(new Customer("AA", 33), 99);
		map.put(new Customer("BB", 39), 95);
		map.put(new Customer("OO", 133), 69);

		Set entry = map.entrySet();
		for(Object obj : entry){            
			System.out.println(obj);
		}
	}
}
  • 定制排序
    例:
public void test2(){
	@Test
	public void test5(){
		Comparator com = new Comparator(){
			public int compare(Object o1,Object o2){               
				if(o1 instanceof Customer && o2 instanceof Customer){
					Customer c1 = (Customer)o1;
					Customer c2 = (Customer)o2;
					int i = c1.getId().compareTo(c2.getId());
					if(i == 0){
						return c1.getName().compareTo(c2.getName());
					}
					return i;

				}
				return 0;
			}
		};
		TreeMap map = new TreeMap(com);
		map.put(new Customer("BB", 1001), 89);
		map.put(new Customer("CB", 1001), 89);
		map.put(new Customer("BB", 1011), 89);
		map.put(new Customer("BB", 10101), 89);

		Set entry = map.entrySet();
		for(Object obj : entry){
			System.out.println(obj);
		}
	}
}

Hashtable(子类:Properties)

  • 线程安全

  • 不允许使用null作为Key和Value

  • 不保证其中Key-Value对的顺序

  • 判断两个Key相同,两个value相同的标准与hashMap(通过hashCode()方法及equals()方法)一致

  • Properties常用来处理属性文件,键值都为String类型

例:

public void test2(){
	@Test
	public void test6() throws FileNotFoundException,IOException{           
		Properties pros = new Properties();
		/*手动创建jdbc.sql文件
		 * user=root
		 * password=123ch
		 */
		//读取文件jdbc.sql
		pros.load(new FileInputStream(new File("jdbc.sql")));
		String user = pros.getProperty("user");
		System.out.println(user);//root
		String password = pros.getProperty("password");
		System.out.println(user);//123ch
	}
}

7.Collections工具类

  • 用于操作Collection及Map的工具类
 import java.util.ArrayList;
import java.util.Collection;       
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.junit.Test;

public class Test18{
	@Test
	//排序操作:均为static方法
	public void test1(){
		List list = new ArrayList();
		list.add(123);
		list.add(345);
		list.add(567);
		list.add(789);
		list.add(999);
		System.out.println(list);//[123, 345, 567, 789, 999]     
		
		//1.reverse(List):反转List中元素的顺序
		Collections.reverse(list);
		System.out.println(list);//[999, 789, 567, 345, 123]

		//2.shuffle(List):对List集合元素进行随机排序
		Collections.shuffle(list);
		System.out.println(list);//[567, 789, 345, 123, 999]

		//3.sort(List)根据元素的自然顺序对指定List集合元素按升序排序
		Collections.sort(list);
		System.out.println(list);//[123, 345, 567, 789, 999]

		//4.sort(List,Comparator)根据指定的Comparator产生的顺序对List集合元素进行排序(可略过)
		ArrayList<Customer> list1= new ArrayList<>();
        list1.add(new Customer("rank",20));
        list1.add(new Customer("Jack",16));
        list1.add(new Customer("Tom",18));
		 Collections.sort(list1, new Comparator<Customer>() {
            @Override
            public int compare(Customer o1, Customer o2) {
                return o1.getId()-o2.getId();   //根据id进行升序排序
            }
        });
        System.out.println(list1);
		//5.将指定List集合的i处元素和j处元素进行交换
		Collections.swap(list, 0, 3);
		System.out.println(list);//[789, 345, 567, 123, 999]

	}
	@Test
	//查找,替换操作
	public void test2(){
		List list = new ArrayList();
		list.add(123);
		list.add(345);
		list.add(567);
		list.add(789);
		list.add(999);
		list.add(789);
		System.out.println(list);//[123, 345, 567, 789, 999]

		//1.Object max(Collecton):根据元素的自然顺序,返回集合中的最大元素
		System.out.println(Collections.max(list));//999

		//2.Object min(Collecton):根据元素的自然顺序,返回集合中最小元素
		System.out.println(Collections.min(list));//123

		//3.int min(Collecton,Object):返回指定集合中指定元素的出现次数
		int i = Collections.frequency(list, 789);
		System.out.println(i);//2

		//4.void copy(List desc,List src):将src中的元素复制到desc中(注:需要desc元素长度大于等于src元素长度,并且复制的元素会覆盖desc元素的src元素相应长度的位置,desc元素长度不变)
		List list1 = new ArrayList();
		list1.add("AAA");
		list1.add("BBB");
		Collections.copy(list, list1);
		System.out.println(list);//[AAA, BBB, 567, 789, 999, 789]

		//5.boolean replaceAll(List list,Object oldValue,Object newValue):使新值替换List中对应的旧值
		boolean b1 = Collections.replaceAll(list, 999, 111);
		System.out.println(b1);//true
		System.out.println(list);//[AAA, BBB, 567, 789, 111, 789]

		//同步控制
		//将指定集合包装线程同步的集合,进而解决多线程并发访问集合时的线程安全问题
		List list3 = Collections.synchronizedList(list);
		System.out.println(list3);
	}	
}

练习
在这里插入图片描述
参考答案:略

感谢大家的支持,关注,评论,点赞!
参考资料:
尚硅谷宋红康20天搞定Java基础中部

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

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

相关文章

linux内网yum源服务器搭建

1.nginx: location / {root /usr/local/Kylin-Server-V10-SP3-General-Release-2303-X86_64;autoindex on;autoindex_localtime on;autoindex_exact_size off; } 注:指定到镜像的包名 2.修改yum源地址 cd /etc/yum.repos.d/vim kylin_x86_64.repo 注: --enabled设置为1 3.重…

Android Studio 的github 工程克隆

上文介绍了Android Studio 里的"Git 建立和简单操作。本文介绍从github 上的工程fork 和clone到本地&#xff0c;然后学习和改进。 本文参考 https://learntodroid.com/how-to-use-git-and-github-in-android-studio/ 克隆clone Github 仓库&#xff1a; 先 Fork 你选择…

仓储23代拣货标签操作指导

服务器使用 V1.4基站已经内置服务程序&#xff0c;无需搭建服务&#xff1b;可跳至第1.4部分 服务器搭建 安装mysql5.7, 创建db_wms数据库并导入原始数据库文件 安装jdk1.8, 配置java环境变量 下载tomca8.0, 部署wms.war到tomcat, 并启动tomcat 下载资源 Windows 64bit: …

知乎如何精准引流?

知乎&#xff0c;用过的人都知道&#xff0c;它是一个相当重要的引流平台。因为它用户规模大、粘性高、活跃性强、百度权重高&#xff0c;流量也相对精准&#xff0c;这也意味者变现能力强。 做引流的朋友都知道&#xff0c;想要把用户从别的平台引流到自己微信上&#xff0c;就…

Gradle项目如何开启debug?

一、打开Idea的终端&#xff0c;输入命令gradle build --debug 开启构建DeBug模式 二、点击编辑配置&#xff0c;并填写自己debug的名称 三、编辑好debug配置后&#xff0c;点击以下debug按钮&#xff0c;就可以开始调试代码了。

vue3下的密码输入框(antdesignvue)

参考:vue下的密码输入框 注意:这是个半成品,有些问题(输入到第6位的时候会往后窜出来一个空白框、光标位置会在数字前面),建议不采用下面这种方式,用另外的(画六个input框更方便) 效果预览 实现思路 制作6个小的正方形div 用一个input覆盖在6个div上 给input设置透明(…

LabVIEW开发油气井管道内无线通信微波系统

LabVIEW开发油气井管道内无线通信微波系统 由于石油和天然气行业的重要性&#xff0c;许多公司和研究人员正在研究和开发新的通信和传感器技术。需要解决的问题与管道状况、地震活动、腐蚀水平、可能的气体泄漏检测和其他性能问题的实时和连续监测有关。处理这些问题的最广泛使…

forlium 笔记 Map

用于创建交互式地图 1 主要参数 1.1. location 地图位置 地图的经纬度 import foliumm folium.Map(location[31.186358, 121.510256],zoom_start15)m 1.2 tiles 内置样式 默认是OpenStreetMap 1.2.1 Stamen Terrain 它强调了地形特征&#xff0c;如山脉、河流和道路 m …

9、Spring_事务管理

六、Spring 事务管理 1.Spring 事务简介 事务概述&#xff1a;保证数据库操作同时成功或者同时失败 Spring 事务的概述&#xff1a;在数据层保证数据库操作同时成功或者同时失败 2.转账案例分析 转账肯定有一个业务方法&#xff1a;给转出用户减钱&#xff0c;给转入用户加…

Java+Github+Jenkins部署

Java项目—Jenkins部署笔记 一&#xff0c;准备 一台服务器操作系统&#xff0c;示例为ubuntu 22.0.4 可运行lsb_release -a查看 二&#xff0c;安装 docker 更新软件包列表&#xff1a; sudo apt update安装必要的软件包&#xff0c;以便使用HTTPS通过APT下载软件包&#x…

财务大模型,产业路向何方?

无论过去还是将来&#xff0c;财务的角色和意义都不会被颠覆&#xff0c;只会被清晰化&#xff0c;只会回归到本源。 作者|思杭 编辑|皮爷 出品|产业家 “今年&#xff0c;我们被市场倒逼着做数字化转型。一切都被打乱了&#xff0c;像这样的转变是前所未有的。到了8月&…

泰迪大数据实训平台产品介绍

大数据产品包括&#xff1a;大数据实训管理平台、大数据开发实训平台、大数据编程实训平台等 大数据实训管理平台 泰迪大数据实训平台从课程管理、资源管理、实训管理等方面出发&#xff0c;主要解决现有实验室无法满足教学需求、传统教学流程和工具低效耗时和内部教学…

hadoop 学习:mapreduce 入门案例三:顾客信息与订单信息相关联(联表)

这里的知识点在于如何合并两张表&#xff0c;事实上这种业务场景我们很熟悉了&#xff0c;这就是我们在学习 MySQL 的时候接触到的内连接&#xff0c;左连接&#xff0c;而现在我们要学习 mapreduce 中的做法 这里我们可以选择在 map 阶段和reduce阶段去做 数据&#xff1a; …

聚合支付-第3章-支付宝支付接入指南

惠民支付 第3章讲义-支付宝接入指南 支付宝接入步骤: 1、进入网址https://open.alipay.com/develop/manage 2、扫码登录支付宝账号&#xff0c;控制台&#xff0c;最下边有一个沙箱环境 3、在“支付宝开放平台开发助手”软件中生成密钥&#xff0c;点击生成密钥&#xff0c;保…

Axure RP 8.1.0.3400(原型设计工具)

Axure RP 8是一款原型设计工具&#xff0c;它提供了丰富的功能和工具&#xff0c;帮助用户创建高质量的网页、移动应用和桌面软件原型。以下是Axure RP 8的一些特色介绍&#xff1a; 强大的交互设计&#xff1a;Axure RP 8支持创建复杂的动画和过渡效果&#xff0c;让你的原型更…

一文彻底扒光 Handler

作者&#xff1a;HenAndroid 典型的生产者-消费者模式。 Android跨进程要掌握的是Binder, 而同一进程中最重要的应该就是Handler 消息通信机制了。我这么说&#xff0c;大家不知道是否认同&#xff0c;如果认同&#xff0c;还希望能给一个关注哈。 Handler 是什么&#xff1f;…

AI智能语音识别模块(一)——离线模组介绍

文章目录 离线语音控制模块简介引脚定义开发平台总结 离线语音控制模块 简介 这是一款低成本&#xff0c;低功耗&#xff0c;小体积的高性价比离线语音识别开发板。能快速学习、验证离线语音控制各种外设&#xff0c;如继电器、LED灯&#xff0c;PWM调光等。 板载了Micro USB接…

MySQL DATE_SUB的实践

函数简介DATE_SUB()函数从DATE或DATETIME值中减去时间值(或间隔)。 下面说明了DATE_SUB()函数的语法&#xff1a; DATE_SUB(start_date,INTERVAL expr unit); DATE_SUB()函数接受两个参数&#xff1a; start_date是DATE或DATETIME的起始值。 expr是一个字符串&#xff0c;用于确…

哪个牌子的电视盒子好用?小编盘点复购率最高电视盒子排行榜

复购率可以体现出产品评价如何&#xff0c;电视盒子是我们经常要购买的数码产品&#xff0c;那么电视盒子哪些品牌的复购率最高&#xff1f;用户忠实度最高呢&#xff1f;想了解哪个牌子的电视盒子好用&#xff0c;可以看看小编根据复购情况整理的电视盒子排行榜&#xff1a; ●…

Weblogic漏洞(三)之 Weblogic 弱口令、任意文件读取漏洞

Weblogic 弱口令、任意文件读取漏洞 环境安装 此次我们实验的靶场&#xff0c;是vnlhub中的Weblogic漏洞中的weak_password靶场&#xff0c;我们 cd 到weak_password&#xff0c;然后输入以下命令启动靶场环境&#xff1a; docker-compose up -d输入以下的命令可以查看当前启…