Java的路线规划

本文分享了学习Java的路线规划,从Java基础开始,包括Java SE的学习内容如面向对象、JVM、I/O、网络编程等,再到Java EE的企业级应用开发,如Servlet、JSP、Spring、Struts等框架,并建议在Java EE之后继续学习分布式、搜索引擎和大数据处理等技术。

又快到一年一度的毕业季了,很多人在大学混了四年,毕业了,找工作了,突然发现什么都不会,技术岗没技术,销售不想做,找工作几个月,换了一个又一个,对未来也不知道可以干什么,十分迷茫。

刚好有的同学大四花钱出去学了一门技术:Java,听说还不错,作为21世纪的年轻人是不是也想往这方面发展呢?

想学好Java必须要有自己的路线规划,这样才能事半功倍!下面,分享一下学习Java的路线规划!

 

1、刚开始需要知道什么

Java SE是我们Java入门的开端,是Java学习的基石,这块内容也就是大家所熟悉的坦克大战、聊天软件、五子棋这些桌面级项目所组成的。学完了Java SE部分,接下来就该选择方向了。

 Java基础

 Java基础是初学者的起点,是帮助你从小白入门到精通必学基础课程!

B站最新录制Java300集>>>   适合准备入行开发的零基础员学习Java,基于最新JDK13、IDEA平台讲解的,视频中穿插多个实战项目。每一个知识点都讲解的通俗易懂,由浅入深。不仅适用于零基础的初学者,有经验的程序员也可做巩固学习。

配套学习:

### Java 实现地图路线规划算法示例 #### 使用 Dijkstra 算法进行最短路径计算 为了实现基于Java的地图路线规划,可以采用经典的Dijkstra算法来寻找两点之间的最短路径。该算法适用于加权图中的单源最短路径问题,在地理信息系统(GIS)中被广泛用于解决实际道路网络上的最优行驶路线等问题。 下面是一个简单的Java程序实例,展示了如何利用Dijkstra算法在一个由节点组成的图形结构上找到从起点到终点的最佳路径: ```java import java.util.*; public class Graph { private final Map<Integer, List<Node>> adjacencyList; public static void main(String[] args){ // 创建一个新的无向图 var graph = new Graph(); // 添加一些边... graph.addEdge(0, 1, 8); graph.addEdge(0, 2, 1); graph.addEdge(1, 2, 2); graph.addEdge(1, 3, 2); graph.addEdge(2, 3, 3); int startVertex = 0; System.out.println("The shortest path from vertex " + startVertex +" to all other vertices:"); dijkstra(graph.adjacencyList, startVertex); } public Graph(){ this.adjacencyList = new HashMap<>(); } /** * Adds an edge between two nodes with a given weight. */ public void addEdge(int source, int destination, double weight){ Node node = new Node(destination,weight); if (!adjacencyList.containsKey(source)){ adjacencyList.putIfAbsent(source,new ArrayList<>()); } adjacencyList.get(source).add(node); } /** * Implements the Dijkstra algorithm for finding minimum distance paths. */ public static void dijkstra(Map<Integer,List<Node>> adjList,int src){ PriorityQueue<Edge> pq = new PriorityQueue<>(Comparator.comparingDouble(o -> o.weight)); Set<Integer> visitedVertices = new HashSet<>(); Map<Integer, Double> distances = initializeDistanceMap(adjList.size(),src); pq.add(new Edge(src,0)); while(!pq.isEmpty()){ Edge currentEdge = pq.poll(); Integer currentNodeId=currentEdge.destination; if (visitedVertices.contains(currentNodeId)) continue; visitedVertices.add(currentNodeId); Optional.ofNullable(adjList.get(currentNodeId)) .ifPresent(nodes->nodes.forEach( neighborNode->{ relax(distances,pq,currentNodeId, neighborNode.vertex,neighborNode.weight); })); } displayDistances(distances); } private static void relax(Map<Integer,Double> dist,PriorityQueue<Edge> q,Integer u,Integer v,double wuv){ if (dist.get(u)+wuv<dist.get(v)){ dist.replace(v,dist.get(u)+wuv); q.add(new Edge(v,dist.get(v))); } } private static Map<Integer,Double> initializeDistanceMap(int sizeOfGraph,int startingPoint){ Map<Integer,Double> result=new HashMap<>(); IntStream.rangeClosed(0,sizeOfGraph-1) .forEach(i->result.put(i,i==startingPoint?0d:Double.MAX_VALUE)); return result; } private static void displayDistances(Map<Integer,Double> map){ map.entrySet().stream() .sorted(Map.Entry.<Integer,Double>comparingByKey()) .forEach(entry->System.out.printf("%s : %f\n",entry.getKey(), entry.getValue())); } } class Node { public final int vertex; public final double weight; public Node(int dest, double cost){ this.vertex=dest; this.weight=cost; } } class Edge implements Comparable<Edge>{ public final int destination; public final double weight; public Edge(int dest, double cost){ this.destination=dest; this.weight=cost; } @Override public int compareTo(Edge another){ return Double.compare(this.weight,another.weight); } } ``` 上述代码定义了一个`Graph`类及其辅助类`Node`和`Edge`,其中包含了构建邻接表表示形式的有向带权重图的方法,以及执行Dijkstra算法的核心逻辑[^4]。 对于更复杂的应用场景,比如考虑交通状况、不同类型的交通工具等因素,则可能需要用到更加高级的技术栈和服务接口,例如Google Maps API或其他第三方服务提供商所提供的SDK和支持库。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值