本文目录一览:
新手java应该怎么学?
零基础小白学习JAVA要懂得一个道理,学习和掌握java相关技术也非一朝一夕之事,不可能一蹴而就,除了知识理论的学习,还需要后续更深入的学习和大量的实践,所以需要你一个良好的学习规划。
随着社会信息的发展,Java技术已经无处不在,无论是手机软件、手机Java游戏还是电脑软件等,只要你使用到电子产品就会碰到和Java有关的东西,更多的企业正采用Java语言开发网站,而在所有程序员中,Java开发工程师就占据20%的比例,不可否认,Java语言有着广泛的行业发展前景,它在行业中的影响力已是不可避免的。
那新手java应该怎么学?学java无非就是自学和报班这两种方式,至于java自学还是报班好,这个还是需要根据您自身的条件来判断的。如果您自控能力、自学能力且有基础那自学好。反之报班好。下面跟您说一下java自学与报java培训班学的不同之处,供您参考。
Java自学:好的地方是省钱,不太好的就是学习时间不确定,学习周期很容易拉长,学习不够系统,对于没有基础的或者自控力不强的人来说,也容易导致半途而废。遇到不懂的问题没有人解答,难以往下进行学习,而且容易学的半知半解。
Java培训:学习时间相对较短,整体学习比较全面,学习内容也比较集中。专业老师按照大纲进行系统授课,在学习中遇到技术问题能够快速得到解决,同时还有专项的练习相对于自学,学习气氛更加浓厚,跟同期学员对问题的探讨,对拓展思路有很大的帮助。并且像一些专业的培训机构,培训完后有相应的就业课程和就业指导,比起自学来说求职胜算更大。
如果您学Java是因为单纯的兴趣爱好,自学是一个很不错的选择。但如果您想通过学Java技术转行的话,那么最好是选择参加Java培训班。当然,可能现在的您感觉参加Java培训班学费很贵,但是对于可以通过学习找到工作,还是比较值得的。
总之,决定了要学习Java技术就不要犹豫,要行动起来,时间可不等人。不管是自学也好还是参加Java培训也罢,都要进行实际了解才行。
java初学者怎么入门
学习JAVA应该从哪一部开始很多人都很迷茫,下面是我整理的学习路线和方向一共四点。希望对你有帮助!
①【学习语言基础】
很显然,掌握语言基础是第一步。如果你不了解基础知识,那么你就不知道自己是否做错了或者接下来该怎么做。当然,这并不是要求你把所有的基础知识都记住,比如所有的 Java关键字、核心概念或者基本编码技术等。
②【开始编写一些小程序】
如果你确信自己对大多数的基础知识和概念足够熟悉,并且能够以某种方式将它们联系起来,那么你就可以进行下一步了,你可以开始尝试编写一些非常基本的 Java 程序,比如打印 hello world、实现简单的加减法,等等。
③【 使用 Java API 编写高级程序】
当你完成了大部分的基础程序编写,并且掌握了基本的编程技巧之后,就可以进行下一步了。我会建议你努力学习 Java 集合和 Java IO 内部的 API。你需要熟悉这些 API 提供的各种类和接口,并利用它们来创建程序。需要注意的是,你应该查找已经存在的 API 和方法来实现功能,而不是自己实现这些逻辑。你的任务是熟悉这些 API,因此你只能够在这些已有的 API 中寻求解决方案。
④【编写桌面程序和 Web 应用】
通过这一步的学习,面对任何 Java 面试你都能够信心满满,当你讨论 Java 相关的话题时也能够充满自信。你需要至少编写一个 Java 桌面或者 GUI 应用程序,比如计算器,然后再编写一个 Web 应用程序,比如医院管理程序。在前面的学习中,你已经掌握了最基本的 Java 知识,现在你需要去探索,然后编写出这两个应用程序。
重要的是,它可以帮助你养成不惜一切代价完成一项任务的好习惯。这种持之以恒的态度对你职业生涯的长远发展是非常重要的。
最后,也是最关键的一点,就是要多看视频教程,这一类的资料很多,可以自己搜索看一下,B站上面很多有关java的学习资料,我冒昧的推荐一个可以参考一下:网页链接
ArrayDeque
写cs61b题目时惊叹为什么会有这种东西,于是搜索了一番,发现这容器还是很有意思的,于是搬运了一下。
参考: ArrayDeque - (jianshu.com)
Java ArrayDeque - Java教程 - 菜鸟教程 (cainiaojc.com)
在ArrayDeque类实现这两个接口:Java Queue和Java Deque
使用了数组来存储数据,同时用两个int值 head 和 tail 来表示头部和尾部。不过需要注意的是 tail 并不是尾部元素的索引,而是尾部元素的 下一位 ,即下一个将要被加入的元素的索引。
ArrayDeque 有三个构造函数来初始化,除了无参的构造函数使用了默认容量,其它两个构造函数会通过 allocateElements 函数来计算初始容量
数组的大小很特殊,大小必为2的n次方(2^n)。下面我们看看 allocateElements 方法
(1)对于一个小于2^30的值,经过五次右移和位或操作后,可以得到一个 2^k - 1 的值。最后再将这个值 +1 ,得到 2^k 。通过这个方法,可以将一个任意的初始值转化为2^n的值.
(2)不过有一点不足在于,如果本身传进来的值就是 2^n 的值,那么经过转化会变成 2^(n+1) ,所以我们在不用刻意去传入 2^n 的值。
(3)如果传入的值大于等于 2^30 ,那么经过转化会变成负值,即 0,此时会把初始值设置为 2^30 ,即最大的容量只有 2^30
在ArrayDeque中,数组是作为环形来使用的,正常情况下在末尾添加元素后,tail=tail+1是要判断是否越界,如果越界,会变为从索引0开始。参考如下图片,当H添加到索引7后,tail值会+1,此时tail=8,但是越界了,所以应该将tail设置为0。
我们看看 tail = (tail + 1) (elements.length - 1) 的正确性:
所以当 tail+1 = length - 1 ,此时数组并没有越界, (tail + 1) (elements.length - 1) 后得到的还是 tail+1 。如果 tail + 1 = length ,此时数组越界了, (tail + 1) (elements.length - 1) 后得到0。
所以通过 (tail + 1) (elements.length - 1) 可以跳过条件判断在环形数组中获取正确的索引值,然后再判断新的 tail 是否等于 head ,如果结果为 true ,那么数组已经满了,需要扩容,即 doubleCapacity() 。
原理和addLast相同
无论是从头部还是从尾部添加元素,都会判断 tail==head ,如果两个索引相遇,说明数组空间已满,需要扩容操作.
ArrayDeque支持从头尾两端移除元素
在上文中,我们讲了怎么去实现一个ArrayDeque,但Java标准库中已经为我们准备好了,我们只需按规则使用就行
add() - 将指定的元素插入ArrayDeque双端队列的 末尾
addFirst() -在ArrayDeque双端队列的 开头 ,插入指定的元素
addLast() - 在ArrayDeque双端队列的 末尾 插入指定的内容(等效于 add() )
注意:如果ArrayDeque双端队列已满,则所有这些方法 add() , addFirst() 和 addLast() 都会引发IllegalStateException
offer() - 将指定的元素插入ArrayDeque双端队列的 末尾
offerFirst() - 在ArrayDeque双端队列的 开始处 插入指定的元素
offerLast() - 将指定的元素插入ArrayDeque双端队列的 末尾
注意: offer(),offerFirst()并offerLast()返回true是否成功插入元素;否则,返回。如果ArrayDeque双端队列已满,则这些方法返回false。
getFirst() - 返回ArrayDeque双端队列的 第一个元素
getLast() - 返回ArrayDeque双端队列的 最后一个元素
注:如果ArrayDeque双端队列为空,getFirst()和getLast()抛出NoSuchElementException。
peek() - 返回ArrayDeque双端队列的 第一个 元素
peekFirst() - 返回ArrayDeque双端队列的 第一个 元素(等效于 peek() )
peekLast() - 返回ArrayDeque双端队列的 最后一个 元素
注:如果ArrayDeque双端队列为空,peek(),peekFirst()和getLast()抛出 NoSuchElementException
remove() - 返回并从ArrayDeque双端队列的 第一个 元素中删除一个元素
remove(element) - 返回并从ArrayDeque双端队列的 头部 删除指定的元素
removeFirst() - 返回并从ArrayDeque双端队列中删除 第一个 元素(等效于remove())
removeLast() - 返回并从ArrayDeque双端队列中删除 最后一个元素
注意:如果数组双端队列为空,则remove(),removeFirst()和removeLast()方法将引发异常。 另外,如果找不到元素,则remove(element)会引发异常。
poll() - 返回并删除ArrayDeque双端队列的 第一个 元素
pollFirst() - 返回并删除ArrayDeque双端队列的 第一个 元素(等效于poll())
pollLast() - 返回并删除ArrayDeque双端队列的 最后一个 元素
注意:如果ArrayDeque双端队列为空,则如果找不到该元素,则poll(),pollFirst()和pollLast()返回null。
删除所有元素
iterator() - 返回可用于遍历ArrayDeque双端队列的 迭代器
descendingIterator() -返回一个迭代器,该迭代器可用于以 相反顺序 遍历ArrayDeque双端队列
注:为了使用这些方法,我们必须导入java.util.Iterator包。
使用迭代器的方法如下
element() -从ArrayDeque双端队列的头部返回一个元素。
contains(element) -在ArrayDeque双端队列中搜索指定的元素。如果找到该元素,则返回true,否则返回false。
size() -返回ArrayDeque双端队列的长度。
toArray() -将ArrayDeque双端队列转换为数组并返回。
clone() -创建ArrayDeque双端队列的副本并返回它。
push() - 在堆栈顶部添加一个元素
peek() - 从堆栈顶部返回一个元素
pop() - 返回并从堆栈顶部删除元素