一些java的基础知识
2017-03-30 16:34
274 查看
一、关于final常量
不能使用默认初始化;可以显式赋值、代码块、构造器赋值;
class Test{ final int I = 0; final String NAME; final double PI; { NAME = "china"; } public Test(){ PI = 3.14; } public Test(double d){ this();//每个构造器都需要给final 变量赋值, // PI = d;//可调用无参构造器赋值,或者显示赋值 } }
二、关于方法throws的Exception
1.一个方法调用了使用throws抛出异常的另一个方法,调用者必须对异常进行处理,或者继续throws;public void throw1() throws Exception{ int i = 1; } public void throw2(){ throw1();//必须方法内try catch 处理,或者方法申明时继续throws }
三、关于HashSet和LinkedHashSet
1 . Set中的元素在底层存储的位置是无序的;2 . Set中的元素是不可重复的;
String str1 = new String("abc"); String str2 = new String("abc"); //要求对象各属性值均不同。即使是new的对象,只要属性值相同,也视为重复的。如str1和str2 //因为String重写了Object的hashcode()方法,根据属性值计算hash值,因此属性值相同,hash值就相同。
3 . 因此,要求存入Set中的自定义对象要重写hashCode()和equal()方法,保证Set中元素的不可重复性;
当向Set中添加对象时,会首先调用对象的hashcode()方法,计算此对象的hash值,此hash值决定了此对象存在Set中的位置。若此位置之前没有对象,则该对象直接存储到此位置。若此位置已有对象,再通过equal()方法比较两个对象是否相同。若相同,后一个对象就不能再添加进去。(要求最好保证hashCode比较的结果要与equal比较的结果一致)
class Person{ int age; String name; //常用重写hashCode的方法 public int hashCode(){ final int prime = 31; int result = 1; result = prime * result + ((age == null) ? 0 : age.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } }
4 . 使用哈希算法,降低了比较的复杂性,若不使用哈希算法,每次向Set中存入元素,都要与Set中已有的所有元素进行比较,过于复杂。
5 . HashSet按hash算法来存储集合中的元素,因此具有很好的存取和查找性能。但是不能保证元素的排列顺序。
6 . LinkedHashSet是HashSet的子类,在根据hashCode值决定元素存储位置的同时,使用链表为元素建立前向和后向索引,来维护元素的词序,这使得元素是以插入顺序保存的。
7 . 因此,LinkedHashSet的插入性能略低于HashSet,但在迭代访问Set里的全部元素时有很好的性能。
相关文章推荐
- java学习笔记,关于java的一些基础知识,适用于初学者,第一节
- JAVA基础知识: 对synchronized(this)的一些理解
- java的一些基础知识 .
- java一些最基础的知识,不知道去查…
- JAVA初学到的一些技巧及基础知识
- java的一些基础的知识
- Java的一些基础知识
- 一些基础的JAVA知识
- JAVA一些基础知识2
- java内接口,抽象类,继承实现的一些基础知识和实例
- 关于java的一些基础知识和经验
- JAVA 一些基础知识3
- java的一些基础知识(引用BlogJava 落花飞雪)
- java 基础知识1-和c++的一些区别
- 一些java的基础知识
- Java入门--一些JAVA相关的基础知识
- 一些java的基础知识
- java中一些简单的基础知识,温故而知新
- 最近的一些JAVA基础知识
- java的一些基础知识