学习scala需要java基础吗?

bdqnwqk2023-10-24基础1

一、学习scala需要java基础吗?

编程基础是要有的,因为看scala的资料大部分都是跟其他语言做比较的,如果没有编程基础将很难看懂比较的意义。

Scala 设计时就考虑了与流行编程环境良好交互,如Java 2运行时环境(JRE)和 .NET框架(CLR)。特别是与主流面向对象语言,如Java和C#尽量无缝交互。Scala有像Java和C#一样的编译模型(独立编译,动态装载 类),允许访问成千上万的高质量类库。

Java语言初学者编写的基础教程,采用秒秒学交互式学习方式,J主要是讲述有关Java面向对象的程序设计所必需的知识和技能,采用交互式软件培训方式,并讲授Java编程语言句法和面向对象的概念,以及Java运行环境的特性,Java类库的使用等。

二、如何使用Java实现单链表?

单链表结构:

Java中单链表采用Node实体类类标识,其中data为存储的数据,next为下一个节点的指针:

package com.algorithm.link;

/**

* 链表结点的实体类

*

*/

public class Node {

Node next = null;//下一个结点

int data;//结点数据

public Node(int data){

this.data = data;

}

}

链表常见操作:

package com.algorithm.link;

import java.util.Hashtable;

/**

* 单链表常见算法

*

*/

public class MyLinkedList {

/**链表的头结点*/

Node head = null;

/**

* 链表添加结点:

* 找到链表的末尾结点,把新添加的数据作为末尾结点的后续结点

* @param data

*/

public void addNode(int data){

Node newNode = new Node(data);

if(head == null){

head = newNode;

return;

}

Node temp = head;

while(temp.next != null){

temp = temp.next;

}

temp.next = newNode;

}

/**

* 链表删除结点:

* 把要删除结点的前结点指向要删除结点的后结点,即直接跳过待删除结点

* @param index

* @return

*/

public boolean deleteNode(int index){

if(indexlength()){//待删除结点不存在

return false;

}

if(index == 1){//删除头结点

head = head.next;

return true;

}

Node preNode = head;

Node curNode = preNode.next;

int i = 1;

while(curNode != null){

if(i==index){//寻找到待删除结点

preNode.next = curNode.next;//待删除结点的前结点指向待删除结点的后结点

return true;

}

//当先结点和前结点同时向后移

preNode = preNode.next;

curNode = curNode.next;

i++;

}

return true;

}

/**

* 求链表的长度

* @return

*/

public int length(){

int length = 0;

Node curNode = head;

while(curNode != null){

length++;

curNode = curNode.next;

}

return length;

}

/**

* 链表结点排序,并返回排序后的头结点:

* 选择排序算法,即每次都选出未排序结点中最小的结点,与第一个未排序结点交换

* @return

*/

public Node linkSort(){

Node curNode = head;

while(curNode != null){

Node nextNode = curNode.next;

while(nextNode != null){

if(curNode.data > nextNode.data){

int temp = curNode.data;

curNode.data = nextNode.data;

nextNode.data = temp;

}

nextNode = nextNode.next;

}

curNode = curNode.next;

}

return head;

}

/**

* 打印结点

*/

public void printLink(){

Node curNode = head;

while(curNode !=null){

System.out.print(curNode.data+" ");

curNode = curNode.next;

}

System.out.println();

}

/**

* 去掉重复元素:

* 需要额外的存储空间hashtable,调用hashtable.containsKey()来判断重复结点

*/

public void distinctLink(){

Node temp = head;

Node pre = null;

Hashtable hb = new Hashtable();

while(temp != null){

if(hb.containsKey(temp.data)){//如果hashtable中已存在该结点,则跳过该结点

pre.next = temp.next;

}else{//如果hashtable中不存在该结点,将结点存到hashtable中

hb.put(temp.data, 1);

pre=temp;

}

temp = temp.next;

}

}

/**

* 返回倒数第k个结点,

* 两个指针,第一个指针向前移动k-1次,之后两个指针共同前进,

* 当前面的指针到达末尾时,后面的指针所在的位置就是倒数第k个位置

* @param k

* @return

*/

public Node findReverNode(int k){

if(klength()){//第k个结点不存在

return null;

}

Node first = head;

Node second = head;

for(int i=0; i