JAVA知识点总结

来源:互联网 发布:奇兵网络支付 编辑:程序博客网 时间:2024/05/17 09:01
 

1、java创建数组的方法

相关知识:http://blog.csdn.net/gideal_wang/article/details/3647837

一维数组创建说明:1、如果指定了数组初始化操作{1,2,3},则不能定义维表达式[3];错例:int[] c = new int[3]{1,2,3};

                                    2. 如果用new定义数组时,必须指定其维度。错例:int[] d = new int[ ];

                                   3、如果无法确定其元素个数,可以这样定义:int[] e = {};

 

          方法1,先new对象,然后再初始化每个元素int[] a = new int[3];   a[0] = 1;a[1] = 2; a[2] = 3;

                      错例: int[] a = new int[3]; //已初始化为0了

                                   a = {1,2,3};

         方法2,直接赋初值: int[] b = {1,2,3};

        方法3,new完对象直接初始化 : int[] c = new int[]{1,2,3};

 二维数组创建说明:1、定义二维数组必须指定其行数,列数可以指定,可以不指定。 这样定义是正确的:int[][] d = new int[3][ ];也可以定义不规则数组arr = new int[2][]; arr[0] = new int[3];  arr[1] = new int[5];

方法1,先new对象,然后再初始化每个元素int[][] a = new int[3][5]; 

方法2,直接赋初值来创建对象

int[][] b = {{1,1,1,1,1}, {2,2,2,2,2}, {3,3,3,3,3} };

方法3,new完对象直接初始化

int[][] a = new int[][] {{1,1,1,1,1}, {2,2,2,2,2}, {3,3,3,3,3} };

2. 以下哪些是线程安全/不安全的?

线程安全:Vector 、Hashtable、Stack;

非线程安全:ArrayList、HashMap、TreeSet、TreeMap、LinkedList

相关知识:

Map/Collection(list、set)的关系 http://otvety.google.ru/otvety/thread?tid=13486667d41ce325

Collection
  ├List 接口
  │├LinkedList基于双向链表机制实现,元素的插入、移动较快-非线程安全
  │├ArrayList 顺序结构动态数组类,不同步-非线程安全
  │└Vector  同步-线程安全
  │ └Stack  基于Vector实现-线程安全
  └Set

│├HashSet: HashSet底层是采用HashMap实现的,无容量限制,不允许元素重复。-非线程安全
  │├TreeSet:基于TreeMap实现,支持排序-非线程安全


  Map
  ├Hashtable :同步-线程安全
  ├HashMap :不同步-非线程安全。
  └WeakHashMap :通常如果一个键对一个对象而言不再被引用,键/对象对将被舍弃。

└TreeMap:实现这样一个映象,对象是按键升序排列的。是基于红黑树实现的,无容量限制-非线程安全

 

如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。
  如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。

Map接口:请注意,Map没有继承Collection接口,Map提供key到value的映射。

Collection接口:Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。

 

 

3、Hashtable与HashMap的区别

答案:http://blog.csdn.net/wl_ldy/article/details/593955

区别1:HashTable的方法是同步的,在所有方法的前面都有synchronized来同步, HashMap未经同步,所以在多线程场合要手动同步。Map m = Collections.synchronizedMap(new HashMap(...));  对HashMap进行同步操作。

区别2:HashTable不允许null值(key和value都不可以) ,HashMap允许null值(key和value都可以)。
区别3.HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。
区别4.HashTable使用Enumeration进行遍历,HashMap使用Iterator进行遍历。

区别5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

区别6.哈希值的使用不同,HashTable直接使用对象的hashCode; 而HashMap重新计算hash值,而且用与代替求模:

相关知识:

Java类库中出现的第一个关联的集合类是 Hashtable ,它是JDK 1.0的一部分。 Hashtable 提供了一种易于使用的、线程安全的、关联的map功能,这当然也是方便的。HashMap 是作为JDK1.2中的集合框架的一部分出现的,它通过提供一个不同步的基类和一个同步的包装器 Collections.synchronizedMap ,解决了线程安全性问题。

4、Java常用集合类的使用场景

  Set或Map:对于查找和删除较为频繁,且元素数量较多的应用,Set或Map是更好的选择;

  ArrayList适用于通过为位置来读取元素的场景;

  LinkedList 适用于要头尾操作或插入指定位置的场景;

  Vector 适用于要线程安全的ArrayList的场景;

  Stack 适用于线程安全的LIFO场景;

  HashSet 适用于对排序没有要求的非重复元素的存放;

  TreeSet 适用于要排序的非重复元素的存放;

  HashMap 适用于大部分key-value的存取场景;

  TreeMap 适用于需排序存放的key-value场景。

来源:http://webservices.ctocio.com.cn/103/11613103.shtml

5、JAVA基本数据类型:

1)字节数及范围Java中有8种类型,6种数值类型(4个整数型和2个浮点型)、一个字符类型和一个boolean类型。

整型:

byte b; 1字节         /8位

short s; 2字节        /16位

int i; 4字节           /32位

long l; 8字节         /64位

浮点型:

float f; 4字节          /32位

double d; 8字节       /64位

char c; 2字节(C语言中是1字节)  /16位

boolean: false/true

整型(都是1位符号位):

byte的取值范围为: 8位,1位符号位。-128~127,占用1个字节(-2的7次方到2的7次方-1)
short的取值范围为:16位,1位符号位。-32768~32767,占用2个字节(-2的15次方到2的15次方-1)
int的取值范围为:32位,1位符号位。(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1)
long的取值范围为:64位,1位符号位。(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)

浮点型(float可以精确到7位;double可以精确到16位):

浮点型转化为整型时,不进行四舍五入,直接截断小数点后面的数。
float和double是表示浮点型的数据类型,他们之间的区别在于他们的精确度不同。

float可以精确到7位有效数字,第8位的数字是第9位数字四舍五入上取得的;范围3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方)占用4个字节;

double可以精确到16位有效数字,第17位的数字是第18位数字四舍五入上取得的。范围1.797693e+308~ 4.9000000e-324 占用8个字节

默认的浮点类型是双精度(double),要想要一个float必须在浮点数后面加F或者f。如:float pi = 3.14;是错误的。

字符型(16位Unicode无符号整数)

char是16位Unicode字符或者说是16位无符号整数,范围从0到65535。

来源:http://www.blogjava.net/raylong1982/archive/2007/10/21/154683.html

原创粉丝点击