object

学习JAVA容器之Collections工具类

核能气质少年 提交于 2020-02-14 01:50:55
Collections是一个可以操作set map list的工具类 常用方法:T 19:57:25 ●排序操作: (均为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 replaceAl(List list,Object oldVal

C++ 面向对象高级开发 -- string

﹥>﹥吖頭↗ 提交于 2020-02-14 01:29:42
1. Object Based(基于对象) vs. Object Oriented(面向对象) Object Based: 面对的是单一class的设计; Object Oriented:面对的是多重classes的设计,class 和 class 之间的关系。 classes 的两个经典分类: class without pointer members -- complex class with pointer members -- string 2. 设计 string   2.1 防卫式声明   2.2 Big Three 若类内有指针成员,则一定要重写 拷贝构造函数,赋值构造函数和析构函数,即Big Three,执行 深拷贝 操作。编译器默认生成的 拷贝构造函数和赋值构造函数 只会进行 浅拷贝 ! 由于未能确定string对象的大小,因此类内提供一个指针成员,指向动态内存。   2.3 ctor 和 dtor 注意!在析构函数中,调用 delete [] m_data; 释放内存。 在右下角的函数应用中,一旦离开作用域 {} , s1 和 s2 自动调用析构函数释放内存。由于 p 是动态分配的内存,其生命周期在整个程序运行周期内。p 要到程序结束运行后,由系统自动回收泄露的内存。   2.4 copy ctor 和 copy op= 拷贝构造函数 拷贝赋值函数 分3个步骤:

Java中的类型擦除与桥方法

陌路散爱 提交于 2020-02-14 00:27:57
类型擦除 Java在语法中虽然存在泛型的概念,但是在虚拟机中却没有泛型的概念,虚拟机中所有的类型都是普通类。无论何时定义一个泛型类型,编译后类型会被都被自动转换成一个相应的原始类型。 比如这个类 public class Parent<T> { public void sayHello(T value) { System.out.println("This is Parent Class, value is " + value); } } 在编译后就变成了 public class Parent { public void sayHello(Object value) { System.out.println("This is Parent Class, value is " + value); } } 对类型变量进行替换的规则有两条: 若为无限定的类型,如 <T> ,被替换为 Object 若为限定类型,如 <T extends Comparable & Serializable> ,则用第一个限定的类型变量来替换,在这里被替换为 Comparable 桥方法 类型擦除后,就产生了一个奇怪的现象。 假设有一个超类: public class Parent<T> { public void sayHello(T value) { System.out.println("This

原型模式详解

坚强是说给别人听的谎言 提交于 2020-02-13 23:20:26
  定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 Prototype 原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。   在JAVA语言中使用原型模式是非常简单的,这是因为Object类当中提供了一个本地方法clone,而JAVA中的任何类只要实现了Cloneable标识接口,就可以使用clone方法来进行对象的拷贝。 原型模式详解 优点:   使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。 使用原型模式的另一个好处是简化对象的创建,使得创建对象就像我们在编辑文档时的复制粘贴一样简单。 注意事项: 使用原型模式复制对象不会调用类的构造方法。因为对象的复制是通过调用Object类的clone方法来完成的,它直接在内存中复制数据,因此不会调用到类的构造方法。不但构造方法中的代码不会执行,甚至连访问权限都对原型模式无效。还记得单例模式吗?单例模式中,只要将构造方法的访问权限设置为private型,就可以实现单例

Can I delete a float array when I have used glBufferData?

∥☆過路亽.° 提交于 2020-02-13 22:55:24
问题 I'm studying OpenGL API and I would like to ask you if I can delete a float array of vertices after passing it to OpenGL. Example code: GLuint VBO; float *vertices = new float[2]; vertices[0] = 0.0f; vertices[1] = 1.0f; glGenBuffers(1, &VBO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); delete[] vertices; Could you tell me consequences about doing it? 回答1: Yes, absolutely. After the glBufferData() call returns, you can do

(2) JVM内存管理:垃圾回收

我的未来我决定 提交于 2020-02-13 09:27:21
回顾上期 1)JVM中引用存在哪里? 答:虚拟机栈,该内存空间线程独有 2)该引用的对象存在哪里? 答:堆,所有通过new方法分配的对象都存在堆中 3)String s1="abc",字符串"abc"存在哪里? 答:运行时常量池,且常量池每次存储对象时会查找是否存过相等的对象,如果有,直接引用指向它,不再开辟空间。 如果你三个问题都可以回答出来,恭喜你!上一篇的精髓你get到了~~~~ 引用的分类 1) 强引用,默认分配方式均为此类型 Object a=new Object(); 2) 软引用,以强引用为参数,构造弱引用 Object a=new Object(); SoftReference<Object> b=new SoftReference<Object>(a); a=null; //强引用a一定要断掉 System.out.println(b.get()); //通过get()方法返回对象 3) 弱引用 Object a=new Object(); WeakReference<Object> b=new WeakReference<Object>(a); a=null; //强引用a一定要断掉 System.out.println(b.get()); //通过get()方法返回对象 System.gc(); 4)幽灵引用,和没有引用是一样的 引用的特点 1

Java的继承

徘徊边缘 提交于 2020-02-13 00:59:15
Java的继承 继承 的本质是 对某一批类的抽象 。用 extends关键字 ,子类(派生类)是父类(基类)的扩展。 Object类:Java中,无论写不写entents Object类,所有的类都默认直接或间接继承Object类。 super 方法重写 继承 子类 继承 父类, 会拥有 父类的 全部public属性 和 全部public方法 。 子类 继承 父类, 不会拥有 父类的 private属性 和 private方法 。 Java的继承是 单继承 :一个儿子,只能有一个父亲;一个父类,可以用多个子类。 举例: 1、Person类(父类): package com.WZ.Demo.ClassSet;public class Person { public int age = 5; public int getAge(){ return this.age; }} 2、Student类(子类): package com.WZ.Demo.ClassSet;public class Student extends Person { } 3、main()方法: package com.WZ.Demo.Application;import com.WZ.Demo.ClassSet.Student;public class Application { public static void

浅谈js数据类型

旧时模样 提交于 2020-02-12 13:24:14
数据类型分类 基本数据类型和对象数据类型 基本数据类型 undefined,null,string,boolean,number,symbol 对象数据类型 array,function,date,regexp,error 可拥有对象方法和不可拥有对象方法 可拥有 string,boolean,number,symbol,object 不可拥有 null,undefined 可变和不可变 可变 对象属性和数组值 不可变 null,undefined,布尔,数字,字符串。字符串看起来是可以修改的但实际调用字符串方法对字符串进行修改时并不会修改原始字符串而是返回一个修改后新的字符串。 有趣的数字 溢出 与其他语言一样,js的数字类型也有自己的取值返回,超出这个范围称为溢出。用infinity表示正无穷大,-infinity表示负无穷大 0 / 0 //NaN 3 / 0 //infinity infinity +(-,*,/) 3 //infinity infinity +(*) infinity //infinity infinity -(/) infinity //NaN 下溢 当计算结果无比趋向0时,称为下溢。正方向趋向0返回0,负方向返回-0. 0 === -0 //true NaN 表示非数字,与任何值都不相等包括其本身。可用isNaN()判断是否为NaN. 浮点数比较的问题

How to produce an array from an object where the number of elements is determined by Object.values?

痴心易碎 提交于 2020-02-12 05:27:06
问题 I have an object like so: { green: 2, blue: 1, red: 2} How can I turn it into an array that looks like this: [ 'green', 'green', 'blue', 'red', 'red'] 回答1: Could be done like this: Object.entries(obj).flatMap(([k, v]) => Array(v).fill(k)); Example: const obj = { green: 2, blue: 1, red: 2}; const res = Object.entries(obj).flatMap(([k, v]) => Array(v).fill(k)); console.log(res); 回答2: This is a neat way with a generator. Perhaps a little overkill for this example. function* makeIterator(obj) {

对javascipt闭包的理解(转载自阮一峰大佬的网络日志)

时间秒杀一切 提交于 2020-02-12 04:49:20
转载自阮一峰大佬,方便自己阅读查看 学习Javascript闭包(Closure) 作者: 阮一峰 日期: 2009年8月30日 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 下面就是我的学习笔记,对于Javascript初学者应该是很有用的。 一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。   var n=999;   function f1(){     alert(n);   }   f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量。   function f1(){     var n=999;   }   alert(n); // error 这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!   function f1(){     n=999;   }   f1();   alert(n); // 999 二、如何从外部读取局部变量? 出于种种原因,我们有时候需要得到函数内的局部变量。但是,前面已经说过了,正常情况下,这是办不到的,只有通过变通方法才能实现。