最近在准备找工作的事情,就复习了一下java。翻了一下书和网上的教材,发现虽然很多书是用java讲数据结构的,但是侧重于将数据结构本身的知识,利用java本身的类库来实现数据结构的系统性的讲解少之又少,所以在此做一下总结,方便各位正在准备工作的和用java实现数据结构的朋友们。

附:代码下载:http://download.csdn.net/detail/sunnyskyliu/4754827

栈:

  1. void m_stack()
  2. {
  3. //Stack
  4. Stack<String> st=new Stack<String>();
  5. //Stack<Integer> st=new Stack<Integer>();
  6. st.push("1a");
  7. st.push("2b");
  8. st.push("3c");
  9. st.push("4d");
  10. System.out.println("pop is:"+st.pop());
  11. System.out.println("size is:"+st.size());
  12. System.out.println("peek is:"+st.peek());
  13. System.out.println("isEmpty is:"+st.isEmpty());
  14. System.out.println("toString is:"+st.toString());
  15. System.out.println();
  16. }

队列:

  1. void m_queue()
  2. {
  3. //Queue
  4. Queue<String> qu=new LinkedList<String>();//wrong:Queue<String> qu=new Queue<String>();
  5. qu.add("1a");
  6. qu.add("2b");
  7. qu.add("3c");
  8. qu.add("4d");
  9. //qu.offer("4d");//equal to add,but no exception
  10. System.out.println("remove is:"+qu.remove());
  11. //System.out.println("poll is:"+qu.poll());//equal to remove,but no exception
  12. System.out.println("peek is:"+qu.peek());
  13. System.out.println(qu.toString());
  14. System.out.println();
  15. }

优先级队列:

  1. class m_priorityQueue extends PriorityQueue<m_priorityQueue>
  2. implements Comparable<m_priorityQueue>
  3. {
  4. private char primary;
  5. private int secondary;
  6. private String item;
  7. public m_priorityQueue(String td,char pri,int sec){
  8. item = td;
  9. primary = pri;
  10. secondary = sec;
  11. }
  12. //for comparable
  13. public int compareTo(m_priorityQueue arg) {
  14. if(primary > arg.primary)
  15. return +1;
  16. if(primary == arg.primary)
  17. if(secondary > arg.secondary)
  18. return +1;
  19. else if(secondary == arg.secondary)
  20. return 0;
  21. return -1;
  22. }
  23. public String toString()
  24. {
  25. return Character.toString(primary)+ secondary + ": " + item;
  26. }
  27. public void add(String td,char pri,int sec)
  28. {
  29. super.add(new m_priorityQueue(td,pri,sec));
  30. }
  31. public void run()
  32. {
  33. add("sixth",'C',4);
  34. add("second",'A',2);
  35. add("fourth",'B',7);
  36. add("fifth",'C',3);
  37. add("first",'A',1);
  38. add("third",'B',1);
  39. while(!isEmpty())
  40. System.out.println(remove());
  41. }
  42. }

链表:

  1. //link list
  2. void m_linkList()
  3. {
  4. LinkedList<String> head = new LinkedList<String>();
  5. head.add("1");
  6. head.add("3");
  7. head.add(1, "2");
  8. //鏈表會自動用遍歷的方式打印所有內容
  9. System.out.println(head);
  10. System.out.println("size is:"+head.size());
  11. //利用Vector或者是ArrayList等Collection往鏈表中加數據
  12. Vector<String> v = new Vector<String>();  //need to import java.util.Vector;
  13. //LinkedList<String> v=new LinkedList<String>();
  14. //向Vector中加入東西
  15. v.add("a");
  16. v.add("b");
  17. //將當前Vector加在當前鏈表的最后
  18. head.addAll(v);
  19. System.out.println(head);
  20. //將當前Vector加在當前鏈表的指定位置
  21. head.addAll(2, v);
  22. System.out.println(head);
  23. //打印指定位置的內容
  24. System.out.println("get(2) is:"+head.get(2));
  25. System.out.println("index is:"+head.indexOf(head.get(2)));
  26. head.addFirst("fist");
  27. head.addLast("last");
  28. System.out.println(head);
  29. //刪除第一個
  30. head.remove(head.getFirst());
  31. head.remove(head.getLast());
  32. System.out.println(head);
  33. //再刪除第一個,采用下標的方式,下標從0開始
  34. head.remove(0);
  35. System.out.println(head);
  36. System.out.println();
  37. }

( 鸣谢:http://wangyu.iteye.com/blog/190762

哈希:

  1. void m_hash()
  2. {
  3. Hashtable<String, Integer> h=new Hashtable<String, Integer>();
  4. h.put("用户1",new Integer(90));
  5. h.put("用户2",new Integer(50));
  6. h.put("用户3",new Integer(60));
  7. h.put("用户4",new Integer(70));
  8. h.put("用户1",new Integer(80));
  9. System.out.println("用户1: "+h.get("用户1"));
  10. /*
  11. //枚举
  12. Enumeration<Integer> e=h.elements();
  13. while(e.hasMoreElements())
  14. {
  15. System.out.println(e.nextElement());
  16. }*/
  17. for(Iterator<String> itor=h.keySet().iterator(); itor.hasNext();)
  18. {
  19. String word=itor.next().toString();
  20. Integer in=(Integer)h.get(word);
  21. System.out.println("word: "+word+" time:"+in);
  22. }
  23. }

main调用:

  1. public static void main(String[] args) {
  2. // TODO Auto-generated method stub
  3. dataStructure da=new dataStructure();
  4. da.m_stack();
  5. da.m_queue();
  6. da.m_linkList();
  7. da.m_hash();
  8. dataStructure.m_priorityQueue pqueue=da.new m_priorityQueue(null, '0', 0);
  9. pqueue.run();
  10. }

java实现 数据结构:链表、 栈、 队列、优先级队列、哈希表的更多相关文章

  1. java面向对象的栈 队列 优先级队列的比较

    栈 队列 有序队列数据结构的生命周期比那些数据库类型的结构(比如链表,树)要短得多.在程序操作执行期间他们才被创建,通常用他们去执行某项特殊的任务:当完成任务之后,他们就会被销毁.这三个数据结构还有一 ...

  2. 自己动手实现java数据结构(八) 优先级队列

    1.优先级队列介绍 1.1 优先级队列 有时在调度任务时,我们会想要先处理优先级更高的任务.例如,对于同一个柜台,在决定队列中下一个服务的用户时,总是倾向于优先服务VIP用户,而让普通用户等待,即使普 ...

  3. java数据结构与算法值优先级队列

    一.优先级队列 什么是优先级队列:优先级队列是一种比栈和队列更加常用的一种数据结构.在优先级队列中,数据项按照关键字的值有序.数据项插入到队列中时,会按照顺序插入到合适的位置,用来保证队列的顺序. 生 ...

  4. C#部分---特殊集合:stack栈集合、queue队列集合、哈希表集合。

    1.stack栈集合:又名 干草堆集合 栈集合 特点:(1)一个一个赋值 一个一个取值(2)先进后出实例化 初始化 Stack st = new Stack(); //添加元素用push st.Pus ...

  5. Stack集合 Queue队列集合 Hashtable哈希表

    Stack集合 干草堆集合 栈集合 栈;stack,先进后出,一个一个赋值,一个一个取值,安装顺序来. 属性和方法 实例化 初始化 Stack st = new Stack(); 添加元素 个数 Co ...

  6. Java数据结构和算法(十三)——哈希表

    Hash表也称散列表,也有直接译作哈希表,Hash表是一种根据关键字值(key - value)而直接进行访问的数据结构.它基于数组,通过把关键字映射到数组的某个下标来加快查找速度,但是又和数组.链表 ...

  7. 数据结构与算法Python版 熟悉哈希表,了解Python字典底层实现

    Hash Table 散列表(hash table)也被称为哈希表,它是一种根据键(key)来存储值(value)的特殊线性结构. 常用于迅速的无序单点查找,其查找速度可达到常数级别的O(1). 散列 ...

  8. [数据结构 - 第8章] 查找之哈希表(C语言实现)

    首先是需要定义一个哈希表的结构以及一些相关的常数.其中 HashTable 就是哈希表结构.结构当中的 elem 为一个动态数组. #define HASHSIZE 12 // 定义哈希表长为数组的长 ...

  9. Java堆(heap)、栈(stack)和队列的区别

    Java里面Stack有两种含义: 一:数据结构 Stack,即java.util.Stack import java.util.Stack; import java.util.Iterator; i ...

  10. JavaScript数据结构与算法(三) 优先级队列的实现

    TypeScript方式实现源码 // Queue类和PriorityQueue类实现上的区别是,要向PriorityQueue添加元素,需要创建一个特殊的元素.这个元素包含了要添加到队列的元素(它可 ...

随机推荐

  1. 【183】VMware + CentOS 安装教程等

    目录: VMware 虚拟机安装 虚拟机上安装 CentOS VMware Tools 安装 为程序增加环境变量 其他 1. VMware 虚拟机安装   ※ 参考:VMware 虚拟机安装使用教程( ...

  2. Eclipse打开Android项目报Parsing Data for android-21 failed错误的解决办法(转载)

    转载:http://segmentfault.com/blog/hongliang/1190000000739285 今天手贱,用android命令打开SDK Manager下载了最新的Android ...

  3. oauth X-Frame-Options 跳转授权页面时,302重定向禁用iframe

    因为oauth/authorize响应头包含X-Frame-Options: DENY解决方案:openresty nginx 移除该属性,经测试生效 more_clear_headers X-Fra ...

  4. css设置页面全屏背景

    .background { background: url(xxx.png); background-size: 100% 100%; height: 100%; position: fixed; w ...

  5. (数论 欧拉筛法)51NOD 1181 质数中的质数(质数筛法)

    如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数.例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数.现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用 ...

  6. 关于自增id 你可能还不知道

    导读:在使用MySQL建表时,我们通常会创建一个自增字段(AUTO_INCREMENT),并以此字段作为主键.本篇文章将以问答的形式讲述关于自增id的一切. 注: 本文所讲的都是基于Innodb存储引 ...

  7. Luogu P1462 通往奥格瑞玛的道路【二分/最短路】

    题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...

  8. Guilty Prince LightOJ - 1012

    Guilty Prince LightOJ - 1012 #include<cstdio> #include<cstring> ][]; int ans,h,w,T,TT; ] ...

  9. Cunning Gena CodeForces - 417D

    Cunning Gena CodeForces - 417D 题意 先将小伙伴按需要的监视器数量排序.然后ans[i][j]表示前i个小伙伴完成j集合内题目所需最少钱.那么按顺序枚举小伙伴,用ans[ ...

  10. how-to-fix-fs-re-evaluating-native-module-sources-is-not-supported-graceful

    http://stackoverflow.com/questions/37346512/how-to-fix-fs-re-evaluating-native-module-sources-is-not ...