数组

11-java学习笔记-反射

强颜欢笑 提交于 2020-04-06 08:03:08
1.反射的应用场景 一、概述 反射技术: Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 二、应用场景 一个已经可以使用的应用程序,因为程序已经做好可以运行使用,不能再进行代码的加入了。而当后期我们新的功能加入程序时,该怎么做呢?就如我们的电脑一样,后期我们可能会鼠标、键盘等,所以电脑给我们预留了usb接口,只要符合这个接口规则的设备,电脑就可以通过加载驱动等操作来使用。 那这个程序能用了,如何使用后期出现的功能类呢? 常用的作法,会提供一个配置文件,来供以后实现此程序的类来扩展功能。对外提供配置文件,让后期出现的子类直接将类名字配置到配置文件中即可。该应用程序直接读取配置文件中的内容。并查找和给定名称相同的类文件。进行如下操作: 1)加载这个类。 2)创建该类的对象。 3)调用该类中的内容。 应用程序使用的类不确定时,可以通过提供配置文件,让使用者将具体的子类存储到配置文件中。然后该程序通过反射技术,对指定的类进行内容的获取。 好处:反射技术大大提高了程序的扩展性。 2. 反射的基石-Class类 对比提问: Person类代表人,它的实例对象就是张三,李四这样一个个具体的人,

51单片机数组的定义方法(code与data的作用)

坚强是说给别人听的谎言 提交于 2020-04-06 06:11:54
转自:http://blog.sina.com.cn/s/blog_94994f7b01010s1h.html 数组前不加“code”或“data”,则默认将数组存放在程序存储器中; code 指定数据是存储在代码区,数据是在编程的时候跟代码一起写入代码存储器,运行过程中不能改变; xdata 指定数据是存储在外部数据存储器了; data 指定数据存储在内部低128字节数据存储器里,如果变量不指定存储位置,默认就是data型,这部分存储器寻址速度最快; idata 指定数据存储在内部低256字节数据存储器里,但51只有128字节内部RAM,52才有256字节; pdata 指定数据存储在外部低256字节数据存储器里,这时候寻址用8位寄存器R0和R1,而不用16位的DPTR,寻址速度比xdata快。 单片机C语言unsigned char code table[] code 是什么作用? code的作用是告诉单片机,我定义的数据要放在ROM(程序存储区)里面,写入后就不能再更改,其实是相当与汇编里面的寻址MOVC(好像是), 因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器),所以在软件中添加了这一个语句起到代替汇编指令的作用,对应的还有data是存入RAM 的意思。 程序可以简单的分为code(程序)区,和data (数据)区,code区在运行的时候是不可以更改的

Set对象

戏子无情 提交于 2020-04-06 06:00:27
Set对象 在javaScript中存在两类聚合数据: 数组和对象。 ES6又新增两类聚合数据:Set对象和Map对象 Set对象,类似数组,但却是去重后的有序聚合数据。成员值都是唯一的(数据类型不同) // let s1 = new Set([1, 2, 3, 2, 1, '2', NaN, +'a', 0, 0/-1]); // console.log(s1) // // 转化数组 // console.log([...s1]) // console.log(Array.from(s1)); Set是构造函数,参数是数组,类数组(或者实现了迭代器接口的数据) 我们可以用...语法对set对象转成数组。 set 相关方法简表: 方法 | 说明 :-:|-- Set.prototype.constructor | 构造函数,默认就是 Set 函数。 Set.prototype.size | 返回 Set 实例的成员总数。 add (value) | 添加某个值,返回 Set 结构本身。 delete(value ) | 删除某个值,返回一个布尔值,表示删除是否成功。 has (value) | 返回一个布尔值,表示参数是否为 Set 的成员。 clear() | 清除所有成员,没有返回值。 keys () | 返回键名的遍历器。 values () | 返回键值的遍历器。

Collection 接口

十年热恋 提交于 2020-04-06 03:57:09
Collection 是java 集合层次结构的根接口,包含了List 和 Set 的所有通用方法并且给出了说明,了解一下有助于理解具体集合实现类的相关方法的实现细节。在此先列出jdk1.8 之前的方法: /** * 集合层次结构中的根接口。集合表示一组对象,这些对象在集合中称为“元素” * 一些集合允许重复的元素,而另一些则不允许。 一些是有序的,而其他则是无序的。 * JDK没有提供此接口的任何直接实现:它提供了更具体的子接口的实现,例如Set 和 List。 * 该接口通常用于传递集合并在需要最大通用性的地方操作它们。 */ public interface Collection< E > extends Iterable< E > {// Iterable< E >是 迭代器接口 // Query Operations 查询操作 /** * 返回此集合中的元素个数。 * 如果大于 Integer.MAX_VALUE 就返回 Integer.MAX_VALUE */ int size () ; /** * 如果此集合不包含任何元素就返回 true */ boolean isEmpty () ; /** * 如果此集合包含指定的元素就返回 true * 通常,当且仅当至少包含一个元素 e 满足 (o==null ? e==null : o.equals(e)) 返回 true

MongoDB之update

对着背影说爱祢 提交于 2020-04-06 02:44:58
Update操作只作用于集合中存在的文档。MongoDB提供了如下方法来更新集合中的文档: db.collection.update() db.collection.updateOne() New in version 3.2 db.collection.updateMany() New in version 3.2 db.collection.replaceOne() New in version 3. 你可以通过指定criteria或者filter来指定你想更新的文档: update函数执行数据更新操作,该函数接受3个主要参数:criteria,action,options: 参数criteria用于指定一个查询,查询选择将要更新的目标记录。 参数action用于指定更新信息,也可以使用操作符来完成。 参数options用于指定更新文档时的选项,可选值包括:upsert和multi。upsert可以指定如果数据存在就更新,不存在就创建数据;multi选项指定是否应该更新所有匹配的文档,或者只更新第一个文档(默认行为)。 为了更好的演示,插入数据: db.users.insertMany( [ { _id: 1, name: "sue", age: 19, type: 1, status: "P", favorites: { artist: "Picasso", food:

指针运算(C++)

一世执手 提交于 2020-04-06 00:31:34
//本文是学习《C++程序设计教程--设计思想与实现》的笔记。 1、指针可以进行加减运算。 数组名本身,没有方括号和下标,实际上是一个地址,表示数组起始地址。 整型数组的数组名本事得到一整数地址,字符数组的数组名得到一字符地址。 可以把数组起始地址赋值给一指针,通过移动指针(加减指针)来对数组元素进行操作。 例如:下面程序用指针运算来计算数组元素的和: #include<iostream.h> int main(){ int iArray[10]; int sum = 0; int * iPtr = iArray;//用数组名 iArray给指针初始化 //int *iPtr; //iPtr = iArray;这两句和上面一句是相等的//iPtr = &iArray[0];这句与左边那句相同 for(int i = 0;i < 10;i++){ iArray[i] = i * 2; cout<<"*iArray["<<i<<"]"<<"is "<<iArray[i]<<endl; } for(int idex = 0; idex < 10; idex++){ sum += *iPtr; cout<<"*iPtr is "<<*iPtr<<endl; iPtr++; } cout<<"sum is"<<sum<<endl; } sum += *iPtr; iPtr++; 等同于

java面试基础篇-List

Deadly 提交于 2020-04-05 18:00:41
一.ArrayList:   底层为数组实现,线程不安全,查询,修改快,增加删除慢, 数据结构:数组以0为下标依次连续进行存储   数组查询元素:根据下标查询就行   数组增加元素:如果需要给index为10的位置添加,则从index为11的位置开始右移 数组删除元素:如果需要删除index为10的位置,则从index为11的位置开始左移 线程: 如果判断线程安不安全只需要了解到是否进行加锁,如果没有加锁的话,多个线程操作同一个对象时就会出现线程不安全的情况. 源码: 1.new一个arraylist,调用add方法 2.查看add方法的源码可以看出,并没有任何加锁操作,这就是线程不安全的 ,这里首先会确认数组的容量,对其进行增加,并将新的元素加入到数组中 使用场景:查询 修改多 二.LikedList:   底层为链表实现,线程不安全,查询修改慢,增加删除快 数据结构:链表的每个元素都存储了下一个元素的地址,从而使一系列的随机的内存地址串在了一起,只要有足够的内存空间,就可以为链表分配内存   链表查:当同时读取所有元素时,链表的效率很高,读第一个,读第二个,以此类推。如果需要找到某个节点时,就需要遍历整个节点,才可以找到需要的元素   链表增加元素:只需要修改它前面的那个元素指针指向的地址即可   链表删除元素:只需要将前一个元素指针指向的地址更改即可 线程:

从Java对象布局markword看syncronized的本质

自作多情 提交于 2020-04-05 15:55:15
可以通过以下工具来查看Java对象的布局:JOL=Java Object Layout。 <!-- https://mvnrepository.com/artifact/org.openjdk.jol/jol-core --> <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.10</version> </dependency> 先看下在JVM中,一个引用的长度占用多少字节: import org.openjdk.jol.vm.VM; public class JavaObjectLayout { public static void main(String[] args) { System.out.println("------------VM details---------------"); System.out.println(VM.current().details()); } } 这个details()方法由JOL类库中的HotspotUnsafe类实现: 运行结果: 运行结果中可以看到: 1.JVM是64位的HotSpot 2.默认开启oop(Ordinary Object Pointer,普通对象指针)压缩,可设置JVM参数-XX:

Golang数组指针和指针数组

♀尐吖头ヾ 提交于 2020-04-04 22:49:49
数组很简单,有PHP基础一看就会,和PHP数组大不一样,不同的就是只有数字索引key,并且要指定类型 声明和初始化示例: package main import "fmt" func main() { // 声明 var arr1 [5]int arr1 = [5]int{1,2,3,4,5} // 声明并初始化 var arr2 [5]int = [5]int{1,2,3,4,5} // 直接初始化,只能在函数里 arr3 := [5]int{1,2,3,4,5} fmt.Println(arr1, arr2, arr3) } 数组循环,主要是for 和 for range 具体网上搜索一些会有很多教程,本文就不详细说,现在来点难的: 数组指针和指针数组: package main import "fmt" // 声明整形数组指针类型,表示该类型变量里存储的是一个数组的首地址 type arrPoint *[6]int func main() { // 声明并初始化数组,大小为6个元素整形数组,前5个数字是0,最后一个2 var a = [6]int{5: 2} var a1 = [6]int{5: 3} // 数组指针,变量的内容是数组的地址 var b arrPoint = &a var b1 arrPoint = &a1 // 指针数组,大小为2元素类型为arrPiont