当前位置: 首页 > news >正文

【备战秋招】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()方法都得到一个全新的迭代器对象,默认游标都在集合 的第一个元素之前。

Image

Image

//迭代器接口 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循环

img

Collection子接口: List接口

Image

鉴于Java中数组用来存储数据的局限性,我们通常使用List替代数组

List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。

List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据 序号存取容器中的元素。

JDK API中List接口的实现类常用的有:ArrayList、LinkedList和Vector。

  • 同: 三个接口都是实现了List接口,储存数据的特点相同:存储有序,可重复的数据
  • 不同: Vector 古老的接口 List

ArrayList 源码分析

Image

Image

LinkList源码分析

体现了双向链表

Image

Vector源码分析

Image

//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);

总结常用方法

Image

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fN6kTOss-1686112437487)(https://secure2.wostatic.cn/static/bpTgeqXWXG2VZCHZqvnHp2/image.png?auth_key=1686112422-fGgbUrTJ7sv6YE7JfAwNua-0-1a494426f4d186aec4eee590aa8a6a17)]

Collection子接口: Set接口

无序不重复

实现类:HashSet

hashset 底层是数组加链表

Image

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是数组+链表+红黑树实现。

Image

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集合

集合 前言 一方面&#xff0c; 面向对象语言对事物的体现都是以对象的形式&#xff0c;为了方便对多个对象 的操作&#xff0c;就要 对对象进行存储。 另一方面&#xff0c;使用Array存储对象方面具有一些弊端&#xff0c;而Java 集合就像一种容器&#xff0c;可以动态地把多…...

setState详解

this. setState( [partialState], [callback]) 1.[partialState] :支持部分状态更改 this, setState({ x:100 //不论总共有多少状态&#xff0c;我们只修改了x&#xff0c;其余的状态不动 });callback :在状态更改/视图更新完毕后触发执行&#xff0c;也可以说只要执行了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平台…...

七、进程程序替换

文章目录 一、进程程序替换&#xff08;一&#xff09;概念&#xff08;二&#xff09;为什么程序替换&#xff08;三&#xff09;程序替换的原理&#xff08;四&#xff09;如何进行程序替换1. execl2. 引入进程创建——子进程执行程序替换&#xff0c;会不会影响父进程呢? &…...

C++核心编程——详解运算符重载

文章目录&#x1f4ac; 一.运算符重载基础知识①基本概念②运算符重载的规则③运算符重载形式④运算符重载建议 二.常用运算符重载①左移(<<)和右移(>>)运算符重载1️⃣重载后函数参数是什么&#xff1f;2️⃣重载的函数返回类型是什么&#xff1f;3️⃣重载为哪种…...

2023年前端面试汇总-CSS

1. CSS基础 1.1. CSS选择器及其优先级 对于选择器的优先级&#xff1a; 1. 标签选择器、伪元素选择器&#xff1a;1&#xff1b; 2. 类选择器、伪类选择器、属性选择器&#xff1a;10&#xff1b; 3. id 选择器&#xff1a;100&#xff1b; 4. 内联样式&#xff1a;1000&a…...

Java调用Pytorch实现以图搜图(附源码)

Java调用Pytorch实现以图搜图 设计技术栈&#xff1a; 1、ElasticSearch环境&#xff1b; 2、Python运行环境&#xff08;如果事先没有pytorch模型时&#xff0c;可以用python脚本创建模型&#xff09;&#xff1b; 1、运行效果 2、创建模型&#xff08;有则可以跳过&#xf…...

【EasyX】实时时钟

目录 实时时钟1. 绘制静态秒针2. 秒针的转动3. 根据实际时间转动4. 添加时针和分针5. 添加表盘刻度 实时时钟 本博客介绍利用EasyX实现一个实时钟表的小程序&#xff0c;同时学习时间函数的使用。 本文源码可从github获取 1. 绘制静态秒针 第一步定义钟表的中心坐标center&a…...

基于XC7Z100的PCIe采集卡(GMSL FMC采集卡)

GMSL 图像采集卡 特性 ● PCIe Gen2.0 X8 总线&#xff1b; ● 支持V4L2调用&#xff1b; ● 1路CAN接口&#xff1b; ● 6路/12路 GMSL1/2摄像头输入&#xff0c;最高可达8MP&#xff1b; ● 2路可定义相机同步触发输入/输出&#xff1b; 优势 ● 采用PCIe主卡与FMC子…...

Kibana:使用 Kibana 自带数据进行可视化(一)

在今天的练习中&#xff0c;我们将使用 Kibana 自带的数据来进行一些可视化的展示。希望对刚开始使用 Kibana 的用户有所帮助。 前提条件 如果你还没有安装好自己的 Elastic Stack&#xff0c;你可以参考如下的视频来开启 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 是一个透明的、自下而上替代自上而下的多元网络&#xff0c;旨在克服当前生态系统的局限性&#xff0c;实现去中心化社会。 aVive&#xff1a;一个基于 SBT 和市场的 deSoc&#xff0c;它使 dapps 能够与分散的位置 oracle 和 SBT 关系进行互操作。您的主权社交网络元宇宙…...

openGauss5.0之学习环境 Docker安装

文章目录 0.前言1. 准备软硬件安装环境1.1 软硬件环境要求1.2 修改操作系统配置1.2.1 关闭操作系统防火墙 1.3 设置字符集参数1.4 设置时区和时间&#xff08;可选&#xff09;关闭swap交换内存1.5 关闭RemoveIPC1.6 关闭HISTORY记录 2. 容器安装2. 1支持的架构和操作系统版本2…...

数据可视化大屏人员停留系统的开发实录(默认加载条件筛选、单击加载、自动刷新加载、异步加载数据)

项目需求 录入进入房间的相关数据&#xff1b;从进入时间开始计时&#xff0c;计算滞留房间的时间&#xff1b;定时刷新数据&#xff0c;超过30分钟的人数&#xff0c;进行红色告警&#xff1b; 实现流程 为了完整地实现上述需求&#xff0c;我们可以按照以下步骤开发&#…...

【Linux】-关于调试器gdb的介绍和使用

作者&#xff1a;小树苗渴望变成参天大树 作者宣言&#xff1a;认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点 点 关 注 吧&#xff01; 文章目录 前言一、Linux中的debug和release二、gdb的使用**1.进入调试****2.显示代码*…...

项目开发经验

hadoop 1.namenode中有专门的工作线程池用于处理与datanode的心跳信号 dfs.namenode.handler.count20 * log2(Clust 2.编辑日志存储路径 dfs.namenode.edits.dir 设置与镜像文件存储路径 dfs.namenode分开存放&#xff0c;可以达到提高并发 3.yarn参数调优&#xff0c;单个服…...

STM32——05-按键、时钟控制、中断复位 点亮LED灯

如何点亮一颗LED灯 编程实现点灯 常用的 GPIO HAL 库函数&#xff1a; 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如下两个对象&#xff1a; Microsoft.XMLHTTP&#xff1a;文件读写&#xff0c;可读写二进制&#xff0c;可指定编码,对于utf-8编码文本文件使用FSO的TextStream对象打开&#xff0c;读取到的内容可能会出现乱码&#xff0c;可以使用该对象打开;前期绑定添加引用…...

MongoDB结合Robo 3T 1.4.3的简单操作

MongoDB的简单操作结合Robo 3T 1.4.3工具进行查询。 常用的正则表达式 /* 29 */ 正则表达式 /\* [0-9]* \*/ "_id" : ObjectId("5f3d05cdfd2aa9a8a7"), 正则表达式 \"([^\"]*_id)\".*, 使用方法&#xff1a;查询结果去掉注释和不需要…...

【学习笔记】[AGC048D] Pocky Game

这是一个非平等博弈。但是只要求你判断胜负&#xff0c;本身也不是一道结论题&#xff0c;所以可以用 D P DP DP来解决。 结论&#xff1a;第一堆石子剩的越多&#xff0c;先手玩家获胜的概率越大。这直接引出了一个非常感性的结论&#xff1a;每次取石子时要么取一堆&#xf…...

Qgis中进行Shp和Excel属性连接实现百强县公共预算空间分析

前言 在之前的博文中&#xff0c;将2022的全国百强县一般公共预算收入的数据下载到了本地&#xff0c;博客原文地址&#xff1a;一种使用Java的快速将Web中表格转换成Excel的方法。对于不关注时空位置关系的一般分析&#xff0c;到此也就基本够用了。但是&#xff0c;如果站在全…...

ES6 新增的循环方法

在 ES6&#xff08;ECMAScript 2015&#xff09;中&#xff0c;新增了一些循环方法&#xff0c;这些方法可以帮助我们更方便地遍历数组、字符串、Set、Map 等数据结构。本文将介绍一些常用的 ES6 循环方法。 for…of 循环 for…of 循环是一种遍历可迭代对象的方法&#xff0c…...

移动端事件300ms延迟解决

有移动端与PC端的项目开发&#xff0c;那么移动端和PC端开发上是存在差异的&#xff0c;比如 click 事件的300ms 延迟&#xff0c;即移动Web页面上的click事件响应都要慢上300ms&#xff0c;移动设备访问Web页面时往往需要 “双击” 或者 “捏开” 来放大页面看清页面的具体内容…...

NRF52832的DFU

开发环境&#xff1a; Winsodw&#xff1a;10 nRF5_SDK&#xff1a;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”&#xff0c;接提示安装。注意安装完…...

开源WebRTC库放大器模式在采集桌面图像时遇到的DPI缩放与内存泄漏问题排查

目录 1、在非100%的显示比例下放大器采集到的桌面图像不全问题 1.1、通过manifest文件禁止系统对软件进行缩放 1.2、调用SetThreadDpiAwarenessContext函数&#xff0c;禁止系统对目标线程中的窗口进行缩放 1.3、使用winver命令查看Windows的年月版本 2、使用放大器模式遇…...

敲黑板!java反射机制和原理

获取Class对象&#xff1a;首先&#xff0c;你需要获取表示要操作的类的Class对象。可以使用以下三种方式之一来获取Class对象&#xff1a; Class.forName()方法&#xff1a;使用类的全限定名获取Class对象&#xff0c;例如&#xff1a;Class<? Class<?> clazz MyC…...

【大数据工具】HBase 集群搭建与基本使用

HBase 集群搭建 HBase 安装包下载地址&#xff1a;https://archive.apache.org/dist/hbase/ 安装 HBase 的前提&#xff1a; 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&#xff09;全局的国际化资源文件&#xff0c;对所有的Action和View都有效定义方式&#xff1a;在struts.xml中增加全局资源文件定路径定义&#xff1a; <constant name"struts.custom.i18n.resources" value…...

外贸建站cms/seo推广优化工具

SELECT * FROM 表名 limit m,n;SELECT*FROMtableLIMIT[offset,]rows;1.m代表从m1条记录行开始检索&#xff0c;n代表取出n条数据。(m可设为0)如&#xff1a;SELECT * FROM 表名 limit 6,5;表示&#xff1a;从第7条记录行开始算&#xff0c;取出5条数据2.值得注意的是&#xff0…...

镇江建站/巩义网络推广公司

重新换回wamp3.1.3开发环境&#xff0c;发现不能切换版本&#xff0c;主要原因是不能添加php到环境变量里面&#xff0c;具体问题见这篇博客&#xff1a; https://blog.csdn.net/hu_feng903/article/details/81259834 但是去掉了php环境变量&#xff0c;composer这些要怎么用…...

wordpress 更新主题/网站排名查询工具

2019独角兽企业重金招聘Python工程师标准>>> 线程带来的风险 安全性问题 ----> 安全性的含义是“永远不发生糟糕的事” 线程安全问题非常复杂&#xff0c;在没有充分同步的情况下&#xff0c;多个线程中的操作顺序是无法预测的。 如果没有同步&#xff0c;那么无…...

网站qq统计/河北百度推广电话

本文实例讲述了Python3使用requests模块实现显示下载进度的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;一、配置request1. 相关资料请求关键参数&#xff1a;streamTrue。默认情况下&#xff0c;当你进行网络请求后&#xff0c;响应体会立即被下载。你可以通过…...