http://www.cnblogs.com/linlf03/archive/2012/12/26/2834908.html
数组:优点 :
不足:
ArrayList:优点:
缺点:
List:优点:
Java采用VM(Virtual Machine)机制,由VM来管理程序的运行当然也包括对GC管理。90年代末期.NET出现了,.NET采用了和Java类似的方法由CLR(Common Language Runtime)来管理。Garbage Collector(垃圾收集器,在不至于混淆的情况下也成为GC)以应用程序的root为基础,遍历应用程序在Heap上动态分配的所有对象[2],通过识别它们是否被引用来确定哪些对象是已经死亡的、哪些仍需要被使用。已经不再被应用程序的root或者别的对象所引用的对象就是已经死亡的对象,即所谓的垃圾,需要被回收。这就是GC工作的原理。为了实现这个原理,GC有多种算法。比较常见的算法有Reference Counting,Mark Sweep,Copy Collection等等。目前主流的虚拟系统.NET CLR,Java VM和Rotor都是采用的Mark Sweep算法。Java的内存管理实际就是对象的管理,其中包括对像的分配和释放。对于程序员来说,分配对象使用new关键字,释放对象时只是将对象赋值为null,让程序员不能够再访问到这个对象,该对象被称为“不可达”。GC将负责回收所有“不可达”对象的内存空间。
根据GC的工作原理,可以通过一些技巧和方式让GC运行更快,高效而又合理。编程建议如下:
.NET的GC机制有这样两个问题:
- 工厂类角色(只有一个工厂类)
- 抽象产品角色
- 具体产品角色
工厂方法模式(当产品种类非常多时会出现大量与之对应的工厂类):有四种角色
- 抽象工厂角色
- 具体工厂角色
- 抽象产品角色
- 具体产品角色
满足条件:
- 系统中有多个产品族,而系统一次只可能消费其中一族产品
- 同属于同一个产品族的产品一起使用时。
组成角色:
- 抽象工厂角色
- 具体工厂角色
- 抽象产品角色
- 具体产品角色
我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等。在多数情况下可以混用。二者本质的区别在于,const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值。而static readonly是在运行时计算出其值的,所以还可以通过静态构造函数来赋值。明白了这个本质区别,我们就不难看出下面的语句中static readonly和const能否互换了:
1. static readonly MyClass myins = new MyClass();2. static readonly MyClass myins = null;3. static readonly B = 10; static readonly A = B * 20;4. static readonly int [] constIntArray = new int[] {1, 2, 3};5. void SomeFunction(){const int a = 10;...}6.private static string astr="abcd";private const string str = astr+"efg";
1:不可以换成const。new操作符是需要执行构造函数的,所以无法在编译期间确定2:可以换成const。我们也看到,Reference类型的常量(除了String)只能是Null。3:可以换成const。我们可以在编译期间很明确的说,A等于200。4:不可以换成const。道理和1是一样的,虽然看起来1,2,3的数组的确就是一个常量。5:不可以换成readonly,readonly只能用来修饰类的field,不能修饰局部变量,也不能修饰property等其他类成员。6.错误:如果在astr前加上const或者const改为readonly即可;
总结:1.const、readonly和static readonly定义的常量,指定初始值后(包括在构造函数内指定的初始值) 将不可更改,可读不可写;2.const定义时必须指定初始值,而readonly定义时可以不进行初始化(MS建议在定义时初始值),同时也可以在构造函数内指定初始值,并以构造函数内指定的值为准;3.const和static readonly定义的常量是静态的,只能由类直接访问;而readonly定义的常量是非静态 的,只能由实例对象访问;4.static readonly常量,如果在构造函数内指定初始值,则必须是静态无参构造函数;5.const是编译时常量,readonly是运行时常量;cosnt较高效,readonly较灵活。在应用上以static readonly代替const,以平衡const在灵活性上的不足, 同时克服编译器优化cosnt性能,所带来的程序集引用不一致问题;
#include
#include
using namespace std;
int check(int arry[5])
{
int max=0,min=65535;
int zerocount=0;
for(int i=0;i<5;i++)
{
if(arry[i]==0)
zerocount++;
else
{
if(arry[i]>max)
max=arry[i];
if(arry[i]=4)
return 1;
else
{
if(max-min<=4)
return 1;
else
return 0;
}
}
int main()
{
int arry[5];
cout<<"一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现;0是例外,可以反复出现"<>arry[i];
int p=check(arry);
if(p)
cout<<"连续"<
输入: 1 2 3 0 5int data[M];
int top[N + 1];
void top_N()
{
top[0] = std::numeric_limits::max(); // Set a "guard" on the boundary to reduce comparision times.
for (int i = 1; i <= N; ++i) top[i] = std::numeric_limits::min();
for (int j = 0; j < M; ++j)
{
for (int k = N; top[k] < data[j]; --k) top[k] = top[k - 1];
top[k + 1] = data[j];
}
}
string s = "ABCCD,CDA,BCDD,DCA,ADC,BCD,CDCAB";
var query = s.Split(',').GroupBy(x => x.OrderBy(y => y));
foreach (var item in query)
Console.WriteLine(string.Join(",", item.ToArray()));
1. 教师号 星期号 是否有课1 2 有1 3 有2 1 有3 2 有`1 2 有写一条sql语句让你变为这样的表教师号 星期一 星期二 星期三1 2 12 13 1各星期下的数字表示:对应的教师在星期几已经排的课数T-SQL实现:
CREATE TABLE COURSE_test (
"教师号" INT,
"星期号" INT ,
"是否有课" nvarchar(20)
)
insert into COURSE_test
VALUES(1,2,'有');
select 教师号,
count(case when(星期号=1) AND (是否有课='有')then 教师号 else null end) as 星期一,
count(case when(星期号=2) AND (是否有课='有')then 教师号 else null end) as 星期二,
count(case when(星期号=3) AND (是否有课='有')then 教师号 else null end) as 星期三
from COURSE_test
group by 教师号