标签归档:数据结构

程序员编程的五种境界

对号入座看看自己属于那个编程层次 编程技能层次 编程技能层次,指的程序员设计和编写程序的能力。这是程序员的根本。 0段—非程序员: 初学编程者,遇到问题,完全是懵懵懂懂,不知道该怎么编程解决问题。也就是说,还是门外汉,还不能称之为“程序员”。计算机在他面前还是一个神秘的黑匣子。 1段—基础程序员: 学习过一段时间编程后,接到任务,可以编写程序完成任务。 编写出来的代码,正常情况下是能够工作的,但在实际运行中,碰到一些特殊条件就会出现各类BUG。也就是说,具备了开发Demo软件的能力,但开发的软件真正交付给客户使用,恐怕会被客户骂死。 2段—数据结构: 经过一段时间的编程实践后,程序员会认识到“数据结构+算法=程序”这一古训的含义。他们会使用算法来解决问题。进而,他们会认识到,算法本质上是依附于数据结构的,好的数据结构一旦设计出来,那么好的算法也会应运而生。 设计错误的数据结构,不可能生长出好的算法。 记得某一位外国先贤曾经说过:“给我看你的数据结构!” 3段—面向对象: 再之后,程序员就会领略面向对象程序设计的强大威力。大多数现代编程语言都是支持面向对象的。但并不是说,你使用面向对象编程语言编程,你用上了类,甚至继承了类,你就是在写面向对象的代码了。 我曾经见过很多用Java,Python,Ruby写的面向过程的代码。 只有你掌握了接口,掌握了多态,掌握了类和类,对象和对象之间的关系,你才真正掌握了面向对象编程技术。 4段—设计模式: 曾经在网上看到这样一句话:“没有十万行代码量,就不要跟我谈什么设计模式”。深以为然。 记得第一次看Gof的设计模式那本书的时候,发现虽然以前并不知道设计模式,但在实际编程过程中,其实还是自觉使用了一些设计模式。设计模式是编程的客观规律,不是谁发明的,而是一些早期的资深程序员首先发现的。 5段–语言专家: 经过一段时间的编程实践,程序员对某一种常用的编程语言已经相当精通了。有些人还成了“语言律师”,擅长向其他程序员讲解语言的用法和各种坑。 6段–多语言专家: 这一个阶段的程序员,因为工作关系,或者纯粹是因为对技术的兴趣,已经学习和掌握了好几种编程语言。已经领略了不同编程语言不同的设计思路,对每种语言的长处和短处有了更多的了解。 他们现在认为,编程语言并不是最重要的,编程语言不过是基本功而已。

发表在 吐槽, 日常随笔 | 标签为 , , , | 留下评论

对一个未知类型的数据,进行java判断

常见的情况是,我们从mysql读出了数据,批量灌入到HASHMAP里,于是这个HashMap里,有int类型,有string,有boolean,有long 下面的函数,直接判断出数据的类型,方便我们做转义的操作。之前写过一个instanceof 的专门用法。 public static <T> String getType(T t){ if(t instanceof String){ return "string"; }else if(t instanceof Integer){ return "int"; }else if(t instanceof Boolean){ return "boolean"; }else{ return " do not know"; } } 一般这么用。 Iterator iter = h.entrySet().iterator(); while … 继续阅读

发表在 JAVA | 标签为 , , , | 一条评论

java优先队列 PriorityQueue

PriorityQueue是个基于优先级堆的极大优先级队列。 此队列按照在构造时所指定的顺序对元素排序,既可以根据元素的自然顺序来指定排序(参阅 Comparable), 也可以根据 Comparator 来指定,这取决于使用哪种构造方法。优先级队列不允许 null 元素。 依靠自然排序的优先级队列还不允许插入不可比较的对象(这样做可能导致 ClassCastException) 比如队列 1 3 5 10 2 自动会被排列 1 2 3 5 10 package com.javaer.examples.datastruct;   import java.util.Comparator; import java.util.PriorityQueue; import java.util.Queue;   import org.apache.poi.ss.formula.functions.Count;   public class PriorityQueueExample {   … 继续阅读

发表在 JAVA | 标签为 , , , , | 2 条评论

java的栈学习

栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表。 栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。 栈是只能在某一端插入和删除的特殊线性表。用桶堆积物品,先堆进来的压在底下,随后一件一件往堆。取走时,只能从上面一件一件取。堆和取都在顶部进行,底部一般是不动的。栈就是一种类似桶堆积物品的数据结构,进行删除和插入的一端称栈顶,另一堆称栈底。插入一般称为进栈,删除则称为退栈。 栈也称为后进先出表。 package com.javaer.examples.datastruct;   import java.util.Stack;   public class StackExample {   /** * @param args */ public static void main(String[] args) { Stack s = new Stack(); Object o; s.push("1"); s.push("2"); o = s.push("3"); System.out.println(o);   … 继续阅读

发表在 JAVA | 标签为 , , | 留下评论

java Queue函数大全及使用说明

在java5中新增加了java.util.Queue接口,用以支持队列的常见操作。该接口扩展了java.util.Collection接口。 Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用element()或者peek()方法。 值得注意的是LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。   1.入队列 offer(obj);   2.出队列 poll();   3.增加一元素 add(obj);   4.增加一集合 add(c);   5.读头元素 peek() or element()   6.取队列长度 size();   7.清队列 clear() import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue;   public class Main {   public static void main(String[] args) { … 继续阅读

发表在 JAVA | 标签为 , , , | 留下评论

采用LinkedList的java队列

Java队列 队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。 在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将是最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。 队列空的条件:front=rear 队列满的条件: rear = MAXSIZE package com.javaer.examples.datastruct;   import java.util.LinkedList; import java.util.Queue;   public class QueueExample {   /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub … 继续阅读

发表在 JAVA | 标签为 , , | 留下评论