




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
java学习心得java学习心得「篇一」关于Java容器类学习心得体会1.接口整个Java容器类的基础是容器接口(例如Collection,Map等接口),而不是类。使用接口的最大好处在于将容器的实现与容器的接口分开,这就意味着你可以使用相同的方法访问容器而不用关心容器是由什么样的数据结构实现的。同样,Iterator接口也使得用户可以使用相同的方法访问不同的容器类。以上这些是通用算法的基础。China1.1Collection接口Collection接口有如下基本方法:booleanadd(Objectobj):如果添加对象后,集合确实发生了变化,则返回true;否则返回falseIteratoriterator:返回一个实现了Iterator接口的对象此外,还有intsizebooleanisEmpty,booleancontains(Objectobj),voidclear等许多有用的方法1.2Map接口Map用于存放关键字/值对。有如下基本方法:Objectget(Objectkey)Objectput(Objectkey,Objectbalue)SetkeySetSetentrySet此外,还有其他有用的方法。需要注意的是,从表面看它似乎就是一种由键值对构成的集合,但实际上并不是这样。不过另一方面假如将Map的某一部分看作集合,有时候也还是显得非常方便的。换言之你可以创建一个集合用它来表达Map的那一部分。综上所述,一个Map可以返回的东西包括它的键值构成的一个Set、由它的值构成的一个集合或者由它的键值对构成的一个Set。1.3Iterator接口Iterator接口有下面3个基本方法:Objectnext:返回迭代器刚越过的元素的引用booleanhasNext:判断容器内是否还有可供访问的元素voidremove:删除迭代器刚越过的元素注意:Java中的迭代器与STL中的迭代器在概念上有很重要的区别。在STL中,迭代器类似于数组的索引,使用这种迭代器可以查看存放在该位置上的元素(类似于通过数组索引i来访问c[i]一样)。Java中的迭代器并不这样运行。查看与位置的变化紧密的结合在一起。每次通过next访问一个元素的同时,迭代器的位置会自动向前走一步。这个问题可以这样理解:Java中的迭代器指向的位置并不是元素,而是元素之间。这样,每次调用next时,迭代器便越过下一个元素,同时返回它刚越过的那个元素的引用。根据上面的说明,很容易得出下面的代码是错误的:it.removeit.remove而下面的代码是正确的:it.removeit.nextit.remove迭代器的典型应用Iteratorit=c.iteratorwhile(it.hasNext){Objectobj=it.next//dosomethingwithobj}1.4子接口1.4.1List接口List从Collection接口中分立出来是因为List的特点――有序的集合。这里指的有序并不是按照大小排好序的(Sorted),而是指集合是可以以确定的顺序访问的序列。针对List的这个特点,它比Collection接口增加了通过索引进行操作的方法。例如,add、remove、get、set等方法的参数表中都可以加入索引的数值,从而操作处在索引位置处的元素。1.4.2Set接口Set与List的不同,它里面的元素是无序的;所以,不能通过任何索引的方法来操作Set对象ChinaItPower.ComZKWED1.4.3ListIterator接口使用与List的迭代器,比Iterator接口增加了一些方法(例如add等)。此外,由于List是双向表,所以还增加了Objectprevious和booleanhasPrevious方法,用法与next和hasNext一样。ChinaItPower.ComZKWED1.4.4SortedMap接口包含如下基本方法:ComparatorcomparatorObjectfirstKeyObjectlastKeyChinaItPower.ComZKWED2.抽象容器类2.1抽象容器类包括AbstractCollection,AbstractList,AbstractSet等等ChinaItPower.ComZKWED2.2为什么要有抽象结合类?例如Collection接口中定义了许多有用的方法,如果实现Collection接口的每个类都自行实现这么多的方法,那将是非常麻烦的。为了使实现Collection接口的类的实现更容易,AbstractCollection类让一些基本方法(比如add和iterator)变成了抽象的方法,而利用这些基本方法的其他方法(例如addAll等等)则具体实现了。ChinaItPower.ComZKWED3.具体的容器3.1ArrayList与LinkedList都是实现了List接口的类,是有序集。List接口支持通过索引的方法来访问元素,对于这一点,ArrayList没有任何问题;但是对于LinkedList则有很大的问题,链表本身不应该支持随机存储,但是作为List的一个实现,链表也提供了对随机访问的支持,但是效率很低。每次通过索引的方法都是进行一次遍历。我认为,其实就不应该让链表支持随机访问;而Java这样实现我想是因为整个集合框架的体系,使得链表与数组可以使用同样的方法使用。综上所述,对于LinkedList最好不使用随机访问,而使用迭代器。ChinaItPower.ComZKWED3.2TreeSet3.2.1TreeSet是SortedSet的一个实现。根据数据结构的知识可以知道,树的效率非常高,而且Java标准库中有TreeSet这样的类,以后应该尽量使用TreeSet来提高程序的效率。3.2.2需要注意的是:TreeSet作为有序集,它通过compareTo或者Comparator来将集合元素排序。任何具有相同比较值的元素(无论它们是否equals),在TreeSet中都作为同一个元素,从而不能有重复。这样以来,即使是不同的对象也不能加入到集合中,这一点有时候很不方便。我在编写A*算法时,不同状态有时候对应着同一个启发函数值,那么这些不同的状态就无法加入到TreeSet中。ChinaItPower.ComZKWED3.3HashSet3.3.1HashSet是非常高效的数据结构,与TreeSet不同,HashSet是比较对象的equals方法来区分不同的对象。这样只有真正不同的对象才能不被重复的加入到集合中。3.3.2需要注意的是:HashSet效率非常高,但是对象的hashCode函数不好确定。一般默认的对象的hashCode函数是根据对象的内存地址得到的。好的hashCode函数是HashSet成功运用的关键。ChinaItPower.ComZKWED4.视图4.1什么是视图?对映象类使用keySet方法,仿佛该方法建立了一个新的集合,并将影响的所有关键字都填入这个集合。实际情况并非如此,对这个集合的任何操作都将反映到原始的映象对象上。实际上,keySet返回的是一个实现Set接口的对象,对该对象的操作就是对映象的操作。这样的集合成为视图。4.2视图的应用4.2.1将现有的容器变为线程安全的容器:使用Collections.synchronizedCollection(Collectionc)方法,在SDK文档中该方法的解释是“Returnsasynchronized(thread-safe)collectionbackedbythespecifiedcollection”。4.2.2将现有的容器变为只读的容器:使用Collections.unmodifiableCollection(Collectionc)方法,在SDK文档中该方法的解释是“Returnsanunmodifiableviewofthespecifiedcollection.”。4.2.3子范围4.2.4Arrays类中的asList方法ChinaItPower.ComZKWED5.通用算法通用的集合接口带来的一大好处就是可以编写通用算法。可以使用Collections中的静态通用方法,也可以编写自己的通用方法。(具体的算法的内容在此略去)ChinaItPower.ComZKWED总结:千万记住这句话――没有最好的容器(数据结构),要根据不同的问题选择不同的容器,以此来达到功能的要求和效率的最优。java学习心得「篇二」对于很多只会C语言的初学者而言,面对java基础语法学习,反而感觉很难,其实其中最大的问题不是语法难,而是一种编程思想的转变。面向过程就是把你的代码封装成函数,然后依次去做一件事情,面向过程是把你要做的事情抽象成对象,告诉对象去做。所以要想学好java入门,必须知道类和对象的概念。类是对生活中事物的抽象描述,比如人类,动物类,交通工具类;对象即是对类的具体实例化,比如张三是人,猫是动物,飞机是交通工具(对象-----类)。Java基础入门学习路线可以总结为四步走:1.java开发环境的搭建;2.java初级之基础语法学习(80%类似C语言);3.java中级之面向对象编程学习(重点);4.java中级之应用编程学习。第一步:JDK软件开发包时java软件开发环境。包括jre运行环境和jvm虚拟机,在oricle官网下载javaSE版本JDK包;配置好环境变量就可以使用了。第二步:java初级语法学习。1.基本数据类型整形,字符型,字节型,长整形,短整形,浮点型,双精度,布尔型;2.运算符+,-,_/,%等;3.控制流(while,switch,ifelse);4.数组的定义方式。此阶段基本无难度,只要了解练习例题。第三步:java面向对象学习。1.类和对象;2.java语言三大特性,封装、继承、多态;3.一些关键字学习(static,final,abstract,extends)等。这是重点,大家根据知识点一步步研究学习才是关键。第四步:java应用编程。例如:文件IO,集合(类似C语言数据结构),异常处理,线程,网络,JDBC数据库操作等,都是掌握面向对象以后,在查找不同的类使用类中不同的方法达到应用的效果,所以并不会很难。等基础语法掌握了就可以继续后面框架学习(javaweb方向,android学习),相信明确思路你会豁然开朗,更有学习动力。java学习心得「篇三」1.学习之路,不走弯路,就是捷径软件开发之路是充满荆棘与挑战之路,也是充满希望之路。Java学习也是如此,没有捷径可走。所有的人都期盼成功,但是并不是每个人都会为走向成功全力以赴。人们在渴望成功的同时,也渴望能够少一分努力,多一分收获。而事实上要获取真正的成功,每个人都必须经历艰辛。无论你出身豪门,还是出身寒舍,你都不得不接受这样一个事实:成功没有捷径可走,只有顽强的意志与坚持不懈的奋斗才能带你走向成功。2.如何学习程序设计?Java是一种平台,也是一种程序设计语言首先一定要保持热情,买一本关于这种语言入门的书,一开始不要看太难的,循序渐进,先看一遍。多练基础代码,将各种语句练得非常熟练,可以选一些计算机语言初等练习题做做。再重头到尾好好看一遍,哪里不懂,可以与他人交流。多看看别人用这种语言写的程序,借鉴编程方法,对自己错误的思想进行校正。多多练习,每天都打一些代码,毕竟熟能生巧!3.培养兴趣兴趣是指一个人力求认识某种事物或从事某种活动的心理倾向。知识是兴趣产生的基础条件,因而要培养某种兴趣,就应有某种知识的积累,学习编程,就应该多看看那方面的书籍,不仅能提高自己的文化内涵,也能渐渐培养自己的学习热情。有空多到一些程序员论坛转转,你会发现,他们其实很乐观幽默,时不时会冒出智慧的火花。4.脚踏实地,循序渐进现实生活中,人人都有梦想,都渴望成功,都想找到一条成功的捷径。其实,捷径就在你的身边,那就是勤于积累,脚踏实地,积极肯干。无论做什么事都要戒骄戒躁,踏实地走好每一步,让自己的生活有目标、有计划,这样我们的生活才会变得充实,我们离成功也就越来越近了;相反,如果浮躁、急功近利,就不能集中精力去完成自己的人生目标,最后很可能一事无成,一败涂地。5.多实践,快实践纸上得来终觉浅,绝知此事要躬行软件开发是一门工程学科,注重的就是实践,"君子动口不动手"对软件开发人员来讲根本就是错误的,他们提倡"动手至上",但别害怕,他们大多温文尔雅,没有暴力倾向,虽然有时候蓬头垢面的一副"比尔盖茨"样。有前辈高人认为,学习编程的秘诀是:编程、编程、再编程,笔者深表赞同。不仅要多实践,而且要快实践。我们在看书的时候,不要等到你完全理解了才动手敲代码,而是应该在看书的同时敲代码,程序运行的各种情况可以让你更快更牢固的掌握知识点6.多读好书书中自有黄金屋,书中自有颜如玉。培根说,“读史使人明智,读诗使人聪慧,演算使人精密,哲理使人深刻,伦理学使人有修养,逻辑修辞使人善辨。”从书中可以领悟“不以物喜,不以己悲”豁达情怀,亦可以领略“天下兴亡,匹夫有责”的豪迈心胸。从好书中提升了思想境界,陶冶了情操。7.思想的领悟学习Java也是如此,必须要有扎实的基础,你才能在J2EE、J2ME领域游刃有余。掌握了基础语法和Java程序运行原理后,我们就可以用Java语言实现面向对象的思想了。面向对象,是一种方法学;是独立于语言之外的编程思想;是CBD基于组件开发的基础;属于强势技术之一。java学习心得「篇四」1)现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单,可以用join方法实现。2)java的堆和栈的区别:堆:是一个运行时数据区,类的对象从中分配空间。这些对象通过new,newarray,anewarray和muitianewarray等指令建立,它们不需要程序代码来显示释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是运行时动态分配内存的,Java垃圾收集器会自动收走这些不再使用的数据。但是缺点是:由于是要在运行时动态分配内存,存取速度较慢。栈的优势:存取速度比堆要快,仅次于寄存器,栈数据可以共享。缺点是,存在栈中的数据大小与生命期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(int,short,long,byte,float,double,boolean,char)和对象句柄。3)java算法:1、冒泡排序:从头开始,依次对相邻的两个元素进行比较,发现有顺序错误就将它们调换过来!重复地进行,直到没有元素需要交换。是稳定排序法,最好的时间复杂度是O(n);2、快速排序:思想是(Divide)选取一个基元X开始(一般选取数组的第一个元素),通过某种分区操作将数组划分成两个部分,左边部分小于等于X,右边部分大于等于X。(Conquer)左右两个子数组递归地调用Divide过程,(Combine)快排作为就地排序算法,不需要任何合并操作!3、递归:程序调用自身,并非不会无休止地调用下去,需要有一个出口,当满足条件时程序也就结束!不然的话,就会出现程序死循环。4)JVM调用GC的频度还是很高的,主要两种情况下进行垃圾回
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物流供应商评估的方法研究试题及答案
- 保洁防控培训课件教学
- 河南省豫北豫南名校2025届高三第一次调研测试化学试卷含解析
- 实战案例国际物流师试题及答案
- 2024年CPMM线上学习攻略试题及答案
- 保健食品防诈骗课件
- 2024年智能化物流平台建设试题及答案
- 怎样提升供应链的透明度试题及答案
- 提升国际物流师的技巧与试题试题及答案
- 河南省郑州市106中2025年高三第三次模拟考试化学试卷含解析
- 高层住宅室内精装修施工组织设计
- 2024年陕西省中考道德与法治试卷(A卷)附答案
- 幼儿园小小美食食谱播报员播报课件
- 车辆租借免责协议
- 第2课《让美德照亮幸福人生》第3框《在日常生活中养成好品行》-【中职专用】《职业道德与法治》同步课堂课件
- MOOC 信号与系统-西安电子科技大学 中国大学慕课答案
- 2023年公文写作考试题库(含答案)
- 《化妆品技术》课件-乳化类底妆
- 山东省市烟台市牟平区2023-2024学年(五四学制)七年级下学期期中考试语文试题
- GB/T 20001.1-2024标准起草规则第1部分:术语
- DB11T 1197-2024 住宅全装修设计标准
评论
0/150
提交评论