【备战秋招】JAVA集合
集合
前言
一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要 对对象进行存储。
另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。
数组在内存存储方面的特点:
- 数组初始化以后,长度就确定了。 String arr[];
- 数组声明的类型,就决定了进行元素初始化时的类型
数组在存储数据方面的弊端:
- 数组初始化以后,长度就不可变了,不便于扩展
- 数组中提供的属性和方法少,不便于进行添加、删除、插入等操作,且效率不高。 同时无法直接获取存储元素的个数
- 数组存储的数据是有序的、可以重复的。---->存储数据的特点单一
综上所诉,引入java集合类的必要性
- Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。
集合类概述
java 集合可分为 Collection 和 Map 两种体系
Collection接口:单列数据,定义了存取一组对象的方法的集合
- List:元素有序、可重复的集合 -------“动态数组” |- ArrayList …LinkedList Vector
- Set:元素无序、不可重复的集合 |-HashSet … LinkedHashSet …TreeSet
Map接口:双列数据,保存具有映射关系“key-value对”的集合
- |-HashMap…Properties…LinkedHashMap…TreeMap
Collection接口
1、添加 add(Object obj) addAll(Collection coll)
2、获取有效元素的个数 int size()
3、清空集合 void clear()
4、是否是空集合 boolean isEmpty()
5、是否包含某个元素 boolean contains(Object obj):是通过元素的equals方法来判断是否 是同一个对象 boolean containsAll(Collection c):也是调用元素的equals方法来比 较的。拿两个集合的元素挨个比较。
6、删除 boolean remove(Object obj) :通过元素的equals方法判断是否是 要删除的那个元素。只会删除找到的第一个元素 boolean removeAll(Collection coll):取当前集合的差集
7、取两个集合的交集 boolean retainAll(Collection c):把交集的结果存在当前集合中,不影响c
8、集合是否相等 boolean equals(Object obj)
9、转成对象数组 Object[] toArray() 数组->集合 Arrays.asList()
10、获取集合对象的哈希值 hashCode()
11、遍历 iterator():返回迭代器对象,用于集合遍历、
添加类时,重写类的equals方法
Collection coll=new ArrayList();//add(Obeject e) :将元素添加到集合roll
//添加类时,重写类的equals方法
coll.add(new Persion(22,"YQQ"));
coll.add("aa");
coll.add("bb");
coll.add(123);
coll.add(new Date());
coll.add(new String("Tom"));//size():获取元素长度
System.out.println(coll.size());//addAll() 将集合coll_1中的元素添加到coll
Collection coll_1=new ArrayList();coll.addAll(coll_1);
System.out.println(coll);//contains(Object e):查看是否包含 e
//调用时 会调用obj对象的equals方法
System.out.println("Tom");
System.out.println(coll.contains(new String("Tom")));
System.out.println("YYQ");
//调用Persion中的equals方法来比较coll里面有没有
System.out.println(coll.contains(new Persion(22, "YQQ")));//containsAll(Collectin coll)判断形参coll1中的所有元素是否都存在于当前集合中
Collection coll_2 = Arrays.asList(123,456);
System.out.println("containsAll:"+coll.containsAll(coll_2));//remove(Object obj:移除数据
// 仍要重写equals方法 同样调用该对象的equals()方法
System.out.println("remove:"+coll.remove(new Persion(22, "YQQ")));//removeAll(Collection coll) :移除coll中的所有元素(交集),去除共有元素
coll.removeAll(coll_2);
System.out.println("removeAll"+coll);//retainAll(Collection coll)获取当前集合和coll的交集,结果返回为当前集合
coll.retainAll(coll_2);//equals(Object obj):要想返回ture 当前对象和形参对象集合的元素都想同
// ArrayList有序的 顺序不一样也是false
coll.equals(coll_1);//hashcode():返回当前对象的hash值
System.out.println(coll.hashCode());//集合->数组 toArray()
Object[] objects = coll.toArray();
for (int i = 0; i < objects.length; i++) {
System.out.println(objects[i]);
}
//扩展 数组到集合 Arrays.asList Arrays类的静态方法
List<String> list = Arrays.asList(new String[]{"AAA", "BBB", "CCC"});
System.out.println(list);//iterator():返回iterator接口的实例,用于遍历集合元素//clear():清空集合
coll.clear();//isEmpty():查看集合是否为空
System.out.println(coll.isEmpty());
迭代器iterator
Iterator对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素。
GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元 素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。类似于“公交车上的售票员”、“火车上的乘务员”、“空姐”。
Collection接口继承了java.lang.Iterable接口,该接口有一个iterator()方法,那么所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了 Iterator接口的对象。
Iterator 仅用于遍历集合,Iterator 本身并不提供承装对象的能力。如果需要创建 Iterator 对象,则必须有一个被迭代的集合。 集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合 的第一个元素之前。
//迭代器接口 iterator ->遍历集合
//此处是利用多态 查看collection的方法,左边编译,右边运行
Collection coll=new ArrayList();//add(Obeject e) :将元素添加到集合roll
//添加类时,重写类的equals方法
coll.add(new Persion(22,"YQQ"));
coll.add("aa");
coll.add("bb");
coll.add(123);
coll.add(new Date());
coll.add(new String("Tom"));Iterator iterator= coll.iterator();
// //方式一
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// //方式二
// for (int i = 0; i < coll.size(); i++) {
// System.out.println(iterator.next());
// }//方式三 在调用it.next()方法之前必须要调用it.hasNext()进行检测。若不调用,且
//下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常。
while (iterator.hasNext()){
System.out.println(iterator.next());
}}//删除集合中Tom对象
Iterator iterator = coll.iterator();
while(iterator.hasNext()){Object obj=iterator.next();if(obj.equals("Tom")) //指针指向这个数据iterator.remove();}
Iterator iterator_1 = coll.iterator();
while(iterator_1.hasNext()){System.out.println("第二次"+iterator_1.next());
}
增强for循环
Collection子接口: List接口
鉴于Java中数组用来存储数据的局限性,我们通常使用List替代数组
List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。
List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据 序号存取容器中的元素。
JDK API中List接口的实现类常用的有:ArrayList、LinkedList和Vector。
- 同: 三个接口都是实现了List接口,储存数据的特点相同:存储有序,可重复的数据
- 不同: Vector 古老的接口 List
ArrayList 源码分析
LinkList源码分析
体现了双向链表
Vector源码分析
//void add(int index, Object ele):在index位置插入ele元素
list.add(1,"1111");//boolean addAll(int index, Collection eles):从index位置开始将eles中
// 的所有元素添加进来
List list_1= Arrays.asList(222,222);
list.addAll(1,list_1);// Object get(int index):获取指定index位置的元素
System.out.println(list.get(0));// int indexOf(Object obj):返回obj在集合中首次出现的位置 没有返回-1
System.out.println("123第一次出现"+list.indexOf(123));// int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置
System.out.println("123最后一次出现"+list.lastIndexOf(123));// Object remove(int index):移除指定index位置的元素,并返回此元素
Object remove = list.remove(0);
System.out.println(remove.toString()+list);// Object set(int index, Object ele):设置指定index位置的元素为ele
list.set(0,11111);// List subList(int fromIndex, int toIndex):返回从fromIndex到toIndex
// 位置的子集合 前闭后开
List list1 = list.subList(0, 1);
System.out.println(list1);
总结常用方法
Collection子接口: Set接口
无序不重复
实现类:HashSet
hashset 底层是数组加链表
HashSet
是 Set 接口的典型实现,大多数时候使用 Set 集合时都使用这个实现类。
HashSet
按 Hash 算法来存储集合中的元素,因此具有很好的存取、查找、删除 性能。
HashSet
具有以下特点:
- 不能保证元素的排列顺序
HashSet
不是线程安全的- 集合元素可以是 null
HashSet
集合判断两个元素相等的标准:两个对象通过 hashCode() 方法比较相 等,并且两个对象的 equals() 方法返回值也相等。
对于存放在Set容器中的对象,对应的类一定要重写equals()和hashCode(Object obj)方法,以实现对象相等规则。即:“相等的对象必须具有相等的散列码”
实现类:TreeSet 排序
可以按照添加 对象的指定属性 进行排序(同一个类)
1 自然排序-Comparable
其中比较两个对象是否相同的标准为:compareTo()返回0,不在是equals()方法
//TreeSet 同一个类的对象
TreeSet treeSet=new TreeSet();
treeSet.add(new Persion(23,"YYQ"));
treeSet.add(new Persion(21,"Lr"));
treeSet.add(new Persion(24,"HLZ"));
treeSet.add(new Persion(222,"YYYYYYYQ"));
treeSet.add(new Persion(222,"YYYQ"));Iterator iterator = treeSet.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
对Persion实现comparable接口,重写compareTo()接口
@Override
public int compareTo(Object o) {
if (o instanceof Persion){Persion p=(Persion)o;int i = this.name.compareTo(p.name);if(i!=0)return i;elsereturn -Integer.compare(this.age,p.age);}
throw new RuntimeException("数据类型错误");
}
2 定制排序 comparator-
Comparator com =new Comparator() {
@Override
public int compare(Object o1, Object o2) {if(o1 instanceof Persion && o2 instanceof Persion){Persion p1=(Persion)o1;Persion p2=(Persion)o2;return Integer.compare(p1.age,p2.age);}throw new RuntimeException("类型错误");}
};
//TreeSet 同一个类的对象
TreeSet treeSet=new TreeSet(com);
treeSet.add(new Persion(23,"YYQ"));
treeSet.add(new Persion(21,"Lr"));
treeSet.add(new Persion(24,"HLZ"));
treeSet.add(new Persion(222,"YYYYYYYQ"));
treeSet.add(new Persion(222,"YYYQ"));Iterator iterator = treeSet.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
Map接口
双列数据 key -value
Map与Collection并列存在。用于保存具有映射关系的数据:key-value
Map 中的 key 和 value 都可以是任何引用类型的数据
Map 中的 key 用Set来存放,不允许重复,即同一个 Map 对象所对应的类,须重写hashCode()和equals()方法
常用String类作为Map的“键”
key 和 value 之间存在单向一对一关系,即通过指定的 key 总能找到唯一的、确定的 value
Map接口的常用实现类:HashMap、TreeMap、LinkedHashMap和 Properties。其中,HashMap是 Map 接口使用频率最高的实现类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m4EYHbaw-1686112437497)(https://secure2.wostatic.cn/static/h6XhQqHgdrkDKHHBTBMZ1y/image.png)]
/**
* /----Map:储存双列数据,储存key-value对的数据
* /----HashMap:作为Map的主要实现类,线程不安全,效率高;储存null的key和value
* /----linkedHashMap:保证在遍历map元素时,可以按照添加的顺序实现遍历
* 原因:在原有的HashMap底层结构基础上,添加了一对双向指针
* 对于频繁的遍历操作,效率高
* /----TreeMap:保证按照添加的key-value对进行排序,实现排序遍历。此时考虑key的自然排序和定制排序
* 底层使用红黑树
* /----HashTable:作为古老的实现类,线程安全,效率低;不能储存null的key和value
* /----Properties:常用来配置文件。key和value都是String类型。* HashMap的底层:数组+链表(JDK7之前)
* 数组+链表+红黑树(JDK8)* 二、Map结构的理解
* Map中的key无序的,不可重复的,使用Set存储所有的key ---->key所在的类要重写equals()和hashcCode()方法
* Map中的value无序的,可重复的,使用Collection储存所有的value ---->value所在的类重写equals()方法
* 一个Key-value键值对构成了一个Entry对象。
* Map中的entry:无序的、不可重复的,使用Set存储所有的entry
*
*
* 三、HashMap的底层实现原理
* Jdk7:
* HashMap map =new HashMap();
* 在实例化之后,底层创建了长度是16的一维数组 Entry[] table
* ...可能执行很多put
* map.(key1,values1)
* 首先,调用key1所在类的hashCode()方法计算key1的 哈希值,此哈希值经过某种算法计算之后,得到在Entry数组中的存放位置,
* 如果此位置上数据为空,此时的key1-value1添加成功
* 如果此位置上数据不为空,(意味着此位置存在一个或者多个数据(以链表的形式存在)),比较key1和已经存在的多个数据的hash值
* 如果key1的哈希值和已经存在的数据的哈希值都不同,此时key1-value1添加成功。
* 如果key1的哈希值和已经存在的数据(key2-value2)的哈希值相同,继续比较,调用key1所在类的equals(key2)
* 如果equals()返回false,则key1-value1添加成功
* 如果equals()返回为ture,则value1替换value2
*
* 在添加过程中,会涉及到扩容问题,当超出临界值且 默认的扩容是原来的二倍,并将原来的数据复制过来
** Jdk8相较于jDk7的区别
* 1、new HashCode() :底层没有创建一个长度为16的数组
* 2、jdk8 底层数组为:Node[] 而非Entry[]
* 3、首次调用put(key,value)方法时,底层创建长度为16的数组
* 4、jdk7底层结构只有数组+链表
* jdk8底层结构 数组+链表+红黑树
* 当数组的某一个索引位置上的元素以链表形式存在的数据个数>8 且当前数组的长度>64时,
* 此时此索引位置上的所有数据改为红黑树储存
HashMap的存储结构
JDK 7及以前版本:HashMap是数组+链表结构(即为链地址法)。 JDK 8版本发布以后:HashMap是数组+链表+红黑树实现。
11.6 Map接口:常用方法
// 添加、删除、修改操作:
// Object put(Object key,Object value):将指定key-value添加到(或修改)当前map对象中
// void putAll(Map m):将m中的所有key-value对存放到当前map中
// Object remove(Object key):移除指定key的key-value对,并返回value
// void clear():清空当前map中的所有数据
// 元素查询的操作:
// Object get(Object key):获取指定key对应的value
// boolean containsKey(Object key):是否包含指定的key
// boolean containsValue(Object value):是否包含指定的value
// int size():返回map中key-value对的个数
// boolean isEmpty():判断当前map是否为空
// boolean equals(Object obj):判断当前map和参数对象obj是否相等// 元视图操作的方法:
// Set keySet():返回所有key构成的Set集合
// Collection values():返回所有value构成的Collection集合
// Set entrySet():返回所有key-value对构成的Set集合//遍历所有的key
Set set = map.keySet();
Iterator iterator = set.iterator();
while(iterator.hasNext())
System.out.println(iterator.next());//遍历所有的value
Collection values = map.values();
for(Object e : values)
System.out.println(e);//方式一:遍历所有的key-value
Set set1 = map.entrySet();
Iterator iterator1 = set1.iterator();
while (iterator1.hasNext()){
Object obj=iterator1.next();
Map.Entry entry=(Map.Entry)obj;
//entrySet集合中的元素都是entry
System.out.println("key:"+entry.getKey()+"--->value:"+entry.getValue());
}//方式二 遍历所有的key-value
Iterator iterator2 = set.iterator();
while (iterator2.hasNext()){
Object key = iterator2.next();
Object val = map.get(key);
System.out.println("key:--"+key+"---:"+val);
TreeMap
/向TreeMap中添加Key-value 要求key必须是同一个类
//因为要按照key进行自然排序和定制排序//自然排序 Persion实现comparable接口的compareTo接口
TreeMap map=new TreeMap();
Persion p1=new Persion(22,"YYq");
Persion p2=new Persion(23,"Y2Yq");
Persion p3=new Persion(24,"Y21Yq");map.put(p1,10);
map.put(p2,122);
map.put(p3,1122);
Set set = map.keySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()){
Object key = iterator.next();
Object value = map.get(key);
System.out.println(key+"----------"+value);
}@Test
public void test1(){//定制排序
TreeMap map=new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof Persion && o2 instanceof Persion){
Persion p1=(Persion)o1;
Persion p2=(Persion)o2;
int compare = Integer.compare(p1.age, p2.age);
if(compare!=0) return compare;
else return p1.name.compareTo(p2.name);
}
throw new RuntimeException("类型不匹配");
}
});
Persion p1=new Persion(22,"YYq");
Persion p2=new Persion(22,"Y2Yq");
Persion p3=new Persion(24,"Y21Yq");map.put(p1,10);
map.put(p2,122);
map.put(p3,1122);
Set set = map.keySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()){
Object key = iterator.next();
Object value = map.get(key);
System.out.println(key+"----------"+value);
}
}
Properties
Map->Hashable->Properties-------------------------------------------
- Properties 类是 Hashtable 的子类,该对象用于处理属性文件
- 由于属性文件里的 key、value 都是字符串类型,所以 Properties 里的 key 和 value 都是字符串类型
- 存取数据时,建议使用setProperty(String key,String value)方法和 getProperty(String key)方法
Properties pro =new Properties();
FileInputStream fis =new FileInputStream("jdbc.properties");
pro.load(fis);
String name = pro.getProperty("name");
String password = pro.getProperty("password");
System.out.println(name+"----"+password);
fis.close();
Collections工具类
Collections 是一个操作 Set、List 和 Map 等集合的工具类
// 排序操作:(均为static方法)
//reverse(List):反转 List 中元素的顺序
//shuffle(List):对 List 集合元素进行随机排序
//sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序
//sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
//swap(List,int, int):将指定 list 集合中的 i 处元素和 j 处元素进行交换// 查找、替换
//Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
//Object max(Collection,Comparator):根据 Comparator 指定的顺序,返回给定集合中的最大元素
//Object min(Collection)
//Object min(Collection,Comparator)
//int frequency(Collection,Object):返回指定集合中指定元素的出现次数
//void copy(List dest,List src):将src中的内容复制到dest中
//boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换 List 对象的所有旧值//使用Collections.copy() 注意dest必须被撑开
List list=new ArrayList();
List list1 = Collections.synchronizedList(list);
list.add(123);
list.add(12);
list.add(-13);
list.add(2141);
List dest= Arrays.asList(new Object[list.size()]);
//把list->放入dest
Collections.copy(dest,list);
System.out.println(dest);
相关文章:
【备战秋招】JAVA集合
集合 前言 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要 对对象进行存储。 另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多…...
setState详解
this. setState( [partialState], [callback]) 1.[partialState] :支持部分状态更改 this, setState({ x:100 //不论总共有多少状态,我们只修改了x,其余的状态不动 });callback :在状态更改/视图更新完毕后触发执行,也可以说只要执行了setS…...
Qt5.12.6配置Android Arm开发环境(windows)
1. 安装jdk1.8 2.安装Android Studio 并安装 SDK 与NDK SDK Tools 选择 26.0.3 SDK Platform 选择 Android SDK Platform 26 NDK选择19版本 安卓ARM环境配置成功如下: JDK1.8 , SDK 26 , NDK 19 在安装QT时要选择 ARMv7(32位CPU)与ARM64-v8a(64位CPU) 选择支持android平台…...
七、进程程序替换
文章目录 一、进程程序替换(一)概念(二)为什么程序替换(三)程序替换的原理(四)如何进行程序替换1. execl2. 引入进程创建——子进程执行程序替换,会不会影响父进程呢? &…...
C++核心编程——详解运算符重载
文章目录💬 一.运算符重载基础知识①基本概念②运算符重载的规则③运算符重载形式④运算符重载建议 二.常用运算符重载①左移(<<)和右移(>>)运算符重载1️⃣重载后函数参数是什么?2️⃣重载的函数返回类型是什么?3️⃣重载为哪种…...
2023年前端面试汇总-CSS
1. CSS基础 1.1. CSS选择器及其优先级 对于选择器的优先级: 1. 标签选择器、伪元素选择器:1; 2. 类选择器、伪类选择器、属性选择器:10; 3. id 选择器:100; 4. 内联样式:1000&a…...
Java调用Pytorch实现以图搜图(附源码)
Java调用Pytorch实现以图搜图 设计技术栈: 1、ElasticSearch环境; 2、Python运行环境(如果事先没有pytorch模型时,可以用python脚本创建模型); 1、运行效果 2、创建模型(有则可以跳过…...
【EasyX】实时时钟
目录 实时时钟1. 绘制静态秒针2. 秒针的转动3. 根据实际时间转动4. 添加时针和分针5. 添加表盘刻度 实时时钟 本博客介绍利用EasyX实现一个实时钟表的小程序,同时学习时间函数的使用。 本文源码可从github获取 1. 绘制静态秒针 第一步定义钟表的中心坐标center&a…...
基于XC7Z100的PCIe采集卡(GMSL FMC采集卡)
GMSL 图像采集卡 特性 ● PCIe Gen2.0 X8 总线; ● 支持V4L2调用; ● 1路CAN接口; ● 6路/12路 GMSL1/2摄像头输入,最高可达8MP; ● 2路可定义相机同步触发输入/输出; 优势 ● 采用PCIe主卡与FMC子…...
Kibana:使用 Kibana 自带数据进行可视化(一)
在今天的练习中,我们将使用 Kibana 自带的数据来进行一些可视化的展示。希望对刚开始使用 Kibana 的用户有所帮助。 前提条件 如果你还没有安装好自己的 Elastic Stack,你可以参考如下的视频来开启 Elastic Stack 并进行下面的练习。你可以开通阿里云检…...
MySQL数据库基础 07
第七章 单行函数 1. 函数的理解1.1 什么是函数1.2 不同DBMS函数的差异1.3 MySQL的内置函数及分类 2. 数值函数2.1 基本函数2.2 角度与弧度互换函数2.3 三角函数2.4 指数与对数2.5 进制间的转换 3. 字符串函数4. 日期和时间函数4.1 获取日期、时间 4.2 日期与时间戳的转换 4.3 获…...
JVM | JVM垃圾回收
JVM | JVM垃圾回收 1、堆空间的基本结构2、内存分配和回收原则2.1、对象优先在 Eden 区分配2.2、大对象直接进入老年代2.3、长期存活的对象将进入老年代2.4、主要进行 gc 的区域2.5、空间分配担保3、死亡对象判断方法3.1、引用计数法3.2、可达性分析算法3.3、引用类型总结3.4、…...
avive零头撸矿
Avive 是一个透明的、自下而上替代自上而下的多元网络,旨在克服当前生态系统的局限性,实现去中心化社会。 aVive:一个基于 SBT 和市场的 deSoc,它使 dapps 能够与分散的位置 oracle 和 SBT 关系进行互操作。您的主权社交网络元宇宙…...
openGauss5.0之学习环境 Docker安装
文章目录 0.前言1. 准备软硬件安装环境1.1 软硬件环境要求1.2 修改操作系统配置1.2.1 关闭操作系统防火墙 1.3 设置字符集参数1.4 设置时区和时间(可选)关闭swap交换内存1.5 关闭RemoveIPC1.6 关闭HISTORY记录 2. 容器安装2. 1支持的架构和操作系统版本2…...
数据可视化大屏人员停留系统的开发实录(默认加载条件筛选、单击加载、自动刷新加载、异步加载数据)
项目需求 录入进入房间的相关数据;从进入时间开始计时,计算滞留房间的时间;定时刷新数据,超过30分钟的人数,进行红色告警; 实现流程 为了完整地实现上述需求,我们可以按照以下步骤开发&#…...
【Linux】-关于调试器gdb的介绍和使用
作者:小树苗渴望变成参天大树 作者宣言:认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 文章目录 前言一、Linux中的debug和release二、gdb的使用**1.进入调试****2.显示代码*…...
项目开发经验
hadoop 1.namenode中有专门的工作线程池用于处理与datanode的心跳信号 dfs.namenode.handler.count20 * log2(Clust 2.编辑日志存储路径 dfs.namenode.edits.dir 设置与镜像文件存储路径 dfs.namenode分开存放,可以达到提高并发 3.yarn参数调优,单个服…...
STM32——05-按键、时钟控制、中断复位 点亮LED灯
如何点亮一颗LED灯 编程实现点灯 常用的 GPIO HAL 库函数: void HAL_GPIO_Init ( GPIO_TypeDef * GPIOx , GPIO_InitTypeDef * GPIO_Init ); void HAL_GPIO_WritePin ( GPIO_TypeDef * GPIOx , uint16_t GPIO_Pin , GPIO_PinState PinState ); void HAL_GPIO_Togg…...
VBA下载二进制文件,文本读写
这里使用了vba如下两个对象: Microsoft.XMLHTTP:文件读写,可读写二进制,可指定编码,对于utf-8编码文本文件使用FSO的TextStream对象打开,读取到的内容可能会出现乱码,可以使用该对象打开;前期绑定添加引用…...
MongoDB结合Robo 3T 1.4.3的简单操作
MongoDB的简单操作结合Robo 3T 1.4.3工具进行查询。 常用的正则表达式 /* 29 */ 正则表达式 /\* [0-9]* \*/ "_id" : ObjectId("5f3d05cdfd2aa9a8a7"), 正则表达式 \"([^\"]*_id)\".*, 使用方法:查询结果去掉注释和不需要…...
【学习笔记】[AGC048D] Pocky Game
这是一个非平等博弈。但是只要求你判断胜负,本身也不是一道结论题,所以可以用 D P DP DP来解决。 结论:第一堆石子剩的越多,先手玩家获胜的概率越大。这直接引出了一个非常感性的结论:每次取石子时要么取一堆…...
Qgis中进行Shp和Excel属性连接实现百强县公共预算空间分析
前言 在之前的博文中,将2022的全国百强县一般公共预算收入的数据下载到了本地,博客原文地址:一种使用Java的快速将Web中表格转换成Excel的方法。对于不关注时空位置关系的一般分析,到此也就基本够用了。但是,如果站在全…...
ES6 新增的循环方法
在 ES6(ECMAScript 2015)中,新增了一些循环方法,这些方法可以帮助我们更方便地遍历数组、字符串、Set、Map 等数据结构。本文将介绍一些常用的 ES6 循环方法。 for…of 循环 for…of 循环是一种遍历可迭代对象的方法,…...
移动端事件300ms延迟解决
有移动端与PC端的项目开发,那么移动端和PC端开发上是存在差异的,比如 click 事件的300ms 延迟,即移动Web页面上的click事件响应都要慢上300ms,移动设备访问Web页面时往往需要 “双击” 或者 “捏开” 来放大页面看清页面的具体内容…...
NRF52832的DFU
开发环境: Winsodw:10 nRF5_SDK:17.1.0 1 工具安装 1.1 gcc-arm-none-eabi Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer 下载“gcc-arm-none-eabi-10.3-2021.10-win32.exe”,接提示安装。注意安装完…...
开源WebRTC库放大器模式在采集桌面图像时遇到的DPI缩放与内存泄漏问题排查
目录 1、在非100%的显示比例下放大器采集到的桌面图像不全问题 1.1、通过manifest文件禁止系统对软件进行缩放 1.2、调用SetThreadDpiAwarenessContext函数,禁止系统对目标线程中的窗口进行缩放 1.3、使用winver命令查看Windows的年月版本 2、使用放大器模式遇…...
敲黑板!java反射机制和原理
获取Class对象:首先,你需要获取表示要操作的类的Class对象。可以使用以下三种方式之一来获取Class对象: Class.forName()方法:使用类的全限定名获取Class对象,例如:Class<? Class<?> clazz MyC…...
【大数据工具】HBase 集群搭建与基本使用
HBase 集群搭建 HBase 安装包下载地址:https://archive.apache.org/dist/hbase/ 安装 HBase 的前提: ZooKeeper 集群 OKHadoop 集群 OK 1. HBase 集群安装 1. 将 HBase 软件包上传至 Hadoop0 解压并重命名 使用 FileZilla 将 hbase-1.3.1-bin.tar.g…...
【Java】数组详解
文章目录 一、数组的基本认识1.1 数组的概念1.2数组的创建与初始化1.3 数组的使用 二、数组的类型 — 引用类型2.1 JVM 内存分布2.2 什么是引用类型2.3 基本类型变量与引用类型变量的区别2.4 Java 中的 null 三、数组的应用3.1 保存数据3.2 函数参数3.3 函数返回值 一、数组的基…...
NumPy库的学习
本文主要记录的是笔者在B站自学Numpy库的学习笔记。 引入numpy库 import numpy as np矩阵的创建 创建一个二行三列的矩阵。 array np.array([[1,2,3],[2,3,4]])查看array的行数、形状、元素数量 print("number of dim:",array.ndim) print("shape:"…...
义乌做网站/重庆网站关键词排名优化
椒盐噪声 椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。椒盐噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生、类比数位转换器或位元传输错误等。例如失效…...
程序员做网站美工能过关吗/百度云搜索引擎官网
【Struts2国际化资源文件定义的3种范围方法】1)全局的国际化资源文件,对所有的Action和View都有效定义方式:在struts.xml中增加全局资源文件定路径定义: <constant name"struts.custom.i18n.resources" value…...
外贸建站cms/seo推广优化工具
SELECT * FROM 表名 limit m,n;SELECT*FROMtableLIMIT[offset,]rows;1.m代表从m1条记录行开始检索,n代表取出n条数据。(m可设为0)如:SELECT * FROM 表名 limit 6,5;表示:从第7条记录行开始算,取出5条数据2.值得注意的是࿰…...
镇江建站/巩义网络推广公司
重新换回wamp3.1.3开发环境,发现不能切换版本,主要原因是不能添加php到环境变量里面,具体问题见这篇博客: https://blog.csdn.net/hu_feng903/article/details/81259834 但是去掉了php环境变量,composer这些要怎么用…...
wordpress 更新主题/网站排名查询工具
2019独角兽企业重金招聘Python工程师标准>>> 线程带来的风险 安全性问题 ----> 安全性的含义是“永远不发生糟糕的事” 线程安全问题非常复杂,在没有充分同步的情况下,多个线程中的操作顺序是无法预测的。 如果没有同步,那么无…...
网站qq统计/河北百度推广电话
本文实例讲述了Python3使用requests模块实现显示下载进度的方法。分享给大家供大家参考,具体如下:一、配置request1. 相关资料请求关键参数:streamTrue。默认情况下,当你进行网络请求后,响应体会立即被下载。你可以通过…...