简单生活 发表于 2015-1-18 11:14:47

JAVA编程:Java基本-Java言语的Socket类具体先容...

自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。线性表,链表等是经常使用的数据布局,在举行Java开辟时,JDK已为我们供应了一系列响应的类来完成基础的数据布局。这些类均在java.util包中。
Collection

├List

│├LinkedList

│├ArrayList

│└Vector

│ └Stack

└Set
Map

├Hashtable

├HashMap

└WeakHashMap

Collection接口
Collection是最基础的汇合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection同意不异的元素而另外一些不可。一些能排序而另外一些不可。JavaSDK不供应间接承继自Collection的类,JavaSDK供应的类都是承继自Collection的“子接口”如List和Set。
一切完成Collection接口的类都必需供应两个尺度的机关函数:无参数的机关函数用于创立一个空的Collection,有一个Collection参数的机关函数用于创立一个新的Collection,这个新的Collection与传进的Collection有不异的元素。后一个机关函数同意用户复制一个Collection。
怎样遍历Collection中的每个元素?不管Collection的实践范例怎样,它都撑持一个iterator()的办法,该办法前往一个迭代子,利用该迭代子便可一一会见Collection中每个元素。典范的用法以下:
Iteratorit=collection.iterator();//取得一个迭代子

while(it.hasNext()){

Objectobj=it.next();//失掉下一个元素

}

由Collection接口派生的两个接口是List和Set。

List接口
List是有序的Collection,利用此接口可以准确的把持每一个元素拔出的地位。用户可以利用索引(元素在List中的地位,相似于数组下标)来会见List中的元素,这相似于Java的数组。
和上面要提到的Set分歧,List同意有不异的元素。除具有Collection接口必备的iterator()办法外,List还供应一个listIterator()办法,前往一个ListIterator接口,和尺度的Iterator接口比拟,ListIterator多了一些add()之类的办法,同意增加,删除,设定元素,还能向前或向后遍历。
完成List接口的经常使用类有LinkedList,ArrayList,Vector和Stack。

LinkedList类
LinkedList完成了List接口,同意null元素。别的LinkedList供应分外的get,remove,insert办法在LinkedList的首部或尾部。这些操纵使LinkedList可被用作仓库(stack),行列(queue)或双向行列(deque)。
注重LinkedList没有同步办法。假如多个线程同时会见一个List,则必需本人完成会见同步。一种办理办法是在创立List时机关一个同步的List:

Listlist=Collections.synchronizedList(newLinkedList(...));

ArrayList类
ArrayList完成了可变巨细的数组。它同意一切元素,包含null。ArrayList没有同步。
size,isEmpty,get,set办法运转工夫为常数。可是add办法开支为分摊的常数,增加n个元素必要O(n)的工夫。其他的办法运转工夫为线性。
每一个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的巨细。这个容量可跟着不休增加新元素而主动增添,可是增加算法并没有界说。当必要拔出大批元素时,在拔出前能够挪用ensureCapacity办法来增添ArrayList的容量以进步拔出效力。
和LinkedList一样,ArrayList也长短同步的(unsynchronized)。

Vector类
Vector十分相似ArrayList,可是Vector是同步的。由Vector创立的Iterator,固然和ArrayList创立的Iterator是统一接口,可是,由于Vector是同步的,当一个Iterator被创立并且正在被利用,另外一个线程改动了Vector的形态(比方,增加或删除一些元素),这时候挪用Iterator的办法时将抛出ConcurrentModificationException,因而必需捕捉该非常。

Stack类
Stack承继自Vector,完成一个落后先出的仓库。Stack供应5个分外的办法使得Vector得以被看成仓库利用。基础的push和pop办法,另有peek办法失掉栈顶的元素,empty办法测试仓库是不是为空,search办法检测一个元素在仓库中的地位。Stack刚创立后是空栈。

Set接口
Set是一种不包括反复的元素的Collection,即恣意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。

很分明,Set的机关函数有一个束缚前提,传进的Collection参数不克不及包括反复的元素。
请注重:必需当心操纵可变对象(MutableObject)。假如一个Set中的可变元素改动了本身形态招致Object.equals(Object)=true将招致一些成绩。

Map接口
请注重,Map没有承继Collection接口,Map供应key到value的映照。一个Map中不克不及包括不异的key,每一个key只能映照一个value。Map接口供应3种汇合的视图,Map的内容能够被看成一组key汇合,一组value汇合,大概一组key-value映照。

Hashtable类
Hashtable承继Map接口,完成一个key-value映照的哈希表。任何非空(non-null)的对象都可作为key大概value。
增加数据利用put(key,value),掏出数据利用get(key),这两个基础操纵的工夫开支为常数。Hashtable经由过程initialcapacity和loadfactor两个参数调剂功能。一般缺省的loadfactor0.75较好地完成了工夫和空间的平衡。增年夜loadfactor能够节俭空间但响应的查找工夫将增年夜,这会影响像get和put如许的操纵。
利用Hashtable的复杂示比方下,将1,2,3放到Hashtable中,他们的key分离是”one”,”two”,”three”:
Hashtablenumbers=newHashtable();

numbers.put(“one”,newInteger(1));

numbers.put(“two”,newInteger(2));

numbers.put(“three”,newInteger(3));
要掏出一个数,好比2,用响应的key:
Integern=(Integer)numbers.get(“two”);

System.out.println(“two=”+n);
因为作为key的对象将经由过程盘算其散列函数来断定与之对应的value的地位,因而任何作为key的对象都必需完成hashCode和equals办法。hashCode和equals办法承继自根类Object,假如你用自界说的类看成key的话,要相称当心,依照散列函数的界说,假如两个对象不异,即obj1.equals(obj2)=true,则它们的hashCode必需不异,但假如两个对象分歧,则它们的hashCode纷歧定分歧,假如两个分歧对象的hashCode不异,这类征象称为抵触,抵触会招致操纵哈希表的工夫开支增年夜,以是只管界说好的hashCode()办法,能加速哈希表的操纵。
假如不异的对象有分歧的hashCode,对哈希表的操纵会呈现意想不到的了局(等候的get办法前往null),要制止这类成绩,只必要切记一条:要同时复写equals办法和hashCode办法,而不要只写个中一个。
Hashtable是同步的。

HashMap类
HashMap和Hashtable相似,分歧的地方在于HashMap长短同步的,而且同意null,即nullvalue和nullkey。,可是将HashMap视为Collection时(values()办法可前往Collection),其迭代子操纵工夫开支和HashMap的容量成比例。因而,假如迭代操纵的功能相称主要的话,不要将HashMap的初始化容量设得太高,大概loadfactor太低。

WeakHashMap类
WeakHashMap是一种改善的HashMap,它对key实施“弱援用”,假如一个key不再被内部所援用,那末该key能够被GC接纳。

总结


假如触及到仓库,行列等操纵,应当思索用List,关于必要疾速拔出,删除元素,应当利用LinkedList,假如必要疾速随机会见元素,应当利用ArrayList。
假如程序在单线程情况中,大概会见仅仅在一个线程中举行,思索非同步的类,其效力较高,假如多个线程大概同时操纵一个类,应当利用同步的类。
要出格注重对哈希表的操纵,作为key的对象要准确复写equals和hashCode办法。只管前往接口而非实践的范例,如前往List而非ArrayList,如许假如今后必要将ArrayList换成LinkedList时,客户端代码不必改动。这就是针对笼统编程。

那这个对象有什么意义?现在很多用javabean的人就不能保证对象有完整的意义,不成熟的使用模式等导致代码疯狂增长,调试维护的时间要得多得多。在说性能之前,先说说你这个比较的来历。据说微软为了证明。net比java好。

飘灵儿 发表于 2015-1-20 18:25:42

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。

不帅 发表于 2015-1-26 10:38:17

学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。

透明 发表于 2015-2-4 00:32:15

让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。

admin 发表于 2015-2-4 17:35:17

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

金色的骷髅 发表于 2015-2-10 04:36:38

那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!

变相怪杰 发表于 2015-2-28 19:49:37

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

精灵巫婆 发表于 2015-3-6 00:12:17

Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。

蒙在股里 发表于 2015-3-6 13:05:53

我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。

因胸联盟 发表于 2015-3-6 13:21:43

其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。

灵魂腐蚀 发表于 2015-3-13 01:09:00

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
页: [1]
查看完整版本: JAVA编程:Java基本-Java言语的Socket类具体先容...