数据结构与算法
拎着木桶打饭
把平凡的事情做到极致,从而在平凡中创造不凡
展开
-
数组
1 :以面向对象的思想来构建数组2 :构建有序数组3 :查找算法:1)线性查找。 2)二分法查找package com.jianshun;/** * 以面向对象的思想对数组进行操作 * @author Administrator * */public class MyArray { private long[] arr; private int elements;//...原创 2018-08-28 15:17:46 · 150 阅读 · 0 评论 -
手动实现LinkedList ,get查询,节点遍历 (2)
package com.jianshun;public class Node { Node previous; //上一个节点 Node next; //下一个节点 Object element; //元素数据 public Node(Node previous, Node next, Object element) { super(); this.previou...原创 2018-09-28 17:51:33 · 557 阅读 · 0 评论 -
手动实现HashMap2_解决键重复的问题_键生成的问题
package com.jianshun;//用于SxtHashMap中public class Node2 { int hash; Object key; Object value; Node2 next; }package com.jianshun;/** * 自定义一个HashMap * @author Administrator * */publi...原创 2018-10-08 09:05:58 · 426 阅读 · 0 评论 -
手动实现HashMap3_重写toString()打印Map的内容
package com.jianshun;//用于SxtHashMap中public class Node2 { int hash; Object key; Object value; Node2 next; }package com.jianshun;/** * 自定义一个HashMap * 重写toString方法,方便我们查看HashMap的键值对信息 ...原创 2018-10-08 09:40:03 · 686 阅读 · 0 评论 -
手工实现HashMap4_get查找键值对
//根据key对象获取对应的值对象 public Object get(Object key){ int hash = myHash(key.hashCode(), table.length); Object value = null; if(table[hash]!=null){ Node2 temp = table[hash]; while(temp !=n...原创 2018-10-08 10:03:25 · 256 阅读 · 0 评论 -
手工实现HashMap5_完善封装_增加泛型
package com.jianshun;//用于SxtHashMap中public class Node3<K,V> { int hash; K key; V value; Node3 next; }package com.jianshun;/** * 自定义一个HashMap * 增加get方法,根据对象的键对象,获取相应的值对象 * @aut...原创 2018-10-08 10:30:58 · 154 阅读 · 2 评论 -
手动实现LinkedList,增加remove方法 (3)
package com.jianshun;public class Node { Node previous; //上一个节点 Node next; //下一个节点 Object element; //元素数据 public Node(Node previous, Node next, Object element) { super(); this.previous =...原创 2018-09-29 10:32:07 · 794 阅读 · 0 评论 -
TreeMap使用和底层原理_Comparable接口_HashTable特点
TreeMap是红黑二叉树的典型实现,我们打开TreeMap的源代码,发现里面有一行核心代码: root用来存储整树的根节点。我们继续跟踪Entry(是TreeMap的内部类)的代码:(jdk1.6),1.8版本中为Node, TreeMap 和 HashMap 实现了同样的 Map接口,,用法对于调用者没有什么区别,HashMap 的效率高于 TreeMap,在需要排序的Map ...原创 2018-10-08 11:34:44 · 241 阅读 · 0 评论 -
Set接口_HashSet常用方法_JDK源码解读
Set 接口继承自 Collection ,Set 没有新增方法,方法和 Collection 保持一致,Set 容器的特点:无序,不可重复,无序指Set 中的元素没有索引,我们只能遍历查找,不重复指不允许加入重复的元素,更确切的说,新元素如果和Set 中某个元素通过 equals() 方法对比为 true,则不能加入,甚至,Set 中只能放一个 null 元素,不能多个。Set 常用的实...原创 2018-10-08 12:10:15 · 116 阅读 · 0 评论 -
手工实现HashSet
HashSet 底层是由 HashMap 实现的,添加的元素将最为 HashMap 中的 key package com.jianshun;import java.util.HashMap;/** * 手动实现HashSet,更深刻理解HashSet原理 * @author Administrator * */public class SxtHashSet { Has...原创 2018-10-08 14:35:08 · 130 阅读 · 0 评论 -
TreeSet使用和底层原理_Comparable接口
TreeSet 底层实际是 TreeMap 实现的,内部维持了一个简化版的 TreeMap,通过 key 来存储 Set 的元素。 TreeSet 内部需要对存储的元素进行排序,因此,我们对应的类需要四线 Comparable 接口。这样才能根据 compareTo() 方法比较对象之间的大小,才能进行内部排序 (TreeMap 对key进行升序排列)package com.jianshun...原创 2018-10-08 15:10:46 · 619 阅读 · 0 评论 -
iterator迭代器的使用_遍历List和Set和Map
迭代器为我们提供了统一的遍历容器的方式:package com.jianshun;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Map;im...原创 2018-10-08 16:32:33 · 854 阅读 · 0 评论 -
手动实现LinkedList 的add方法(1)
链表的结构就相当于手拉手的游戏;package com.jianshun;public class Node { Node previous; //上一个节点 Node next; //下一个节点 Object element; //元素数据 public Node(Node previous, Node next, Object element) { super(...原创 2018-09-28 11:01:58 · 1456 阅读 · 3 评论 -
手动实现ArrayList ,增加remove的两种方法(5)
package com.jianshun;/** * 增加remove方法 * @author 凡凡 * */public class SxtArrayList05<E> { private Object[] elementData; private int size; private static final int DEFAULT_CAPACITY=10...原创 2018-09-27 17:26:19 · 279 阅读 · 0 评论 -
手动实现LinkedList, 增加添加节点方法 (4)
package com.jianshun;public class Node { Node previous; //上一个节点 Node next; //下一个节点 Object element; //元素数据 public Node(Node previous, Node next, Object element) { super(); this.previous =...原创 2018-10-02 17:01:01 · 1353 阅读 · 0 评论 -
手写LinkedList, 增加小封装,增加泛型约束(5)
package com.jianshun;public class Node { Node previous; //上一个节点 Node next; //下一个节点 Object element; //元素数据 public Node(Node previous, Node next, Object element) { super(); this.previous =...原创 2018-10-02 17:15:33 · 211 阅读 · 0 评论 -
Vector向量——线程安全
Vector 底层使用List 实现的,相关的方法都加了同步检查,因此,“线程安全,效率低”,比如,indexOf方法就增加了synchronized同步标记; public synchronized int indexOf(Object o, int index){ }建议: 如何选用 ArrayList, Linke...原创 2018-10-02 17:28:43 · 466 阅读 · 0 评论 -
Map 接口,HashMap常用方法 (1)
Map 就是用来存储 “键(key)-值(value)对”,Map 类中存储的“键值对”通过键来标识,所以键值对不能重复,Map 接口的实现类有HashMap, TreeMap, HashTable, Preperties等package com.jianshun;import java.util.HashMap;import java.util.Map;/** * 测试Ha...原创 2018-10-02 17:53:18 · 763 阅读 · 0 评论 -
HashMap常用方法 (2)
package com.jianshun;import java.util.HashMap;import java.util.Map;/** * 测试Map的常用方法 * @author Administrator * */public class TextMap2 { public static void main(String[] args) { Employee...原创 2018-10-02 19:44:56 · 128 阅读 · 0 评论 -
HashMap底层原理——储存键值对底层原理
HashMap底层是由哈希表实现的,是非常重要的数据结构,哈希表的基本结构就是“数组+链表”。1:数组:占用空间连续,寻址容易,查询速度快,但是,增加和删除效率非诚低2:链表:占用空间不连续,寻址困难,查询速度慢,但是,增加和删除效率非常高。HashMap 刚好结合了数组和链表的优点HashMap 底层是由多个Entry节点对象组成(JDK1.6)/ 多个Node节点组成(1.8...原创 2018-10-03 15:51:15 · 2122 阅读 · 0 评论 -
HashMap 底层原理_查找键值对过程_equals 和 hashcode 方法
获取数据过程 get(key): 我们需要通过key对象获得 “键值对” 对象,进而返回 value 对象。 (1):获得 key 的 hashcode,通过 hash() 散列算法得到 hash 值,进而定位到数组的位置。 (2):在链表上挨个比较key对象,调用equals()方法,将 key 对象和链表上所有节点的 key 对象进行比较,直到碰到返回 ...原创 2018-10-03 16:15:49 · 1060 阅读 · 0 评论 -
手动实现HashMap1_基本结构_put存储键值对
package com.jianshun;//用于SxtHashMap中public class Node2 { int hash; Object key; Object value; Node2 next;}package com.jianshun;/** * 自定义一个HashMap * @author Administrator * */public ...原创 2018-10-03 17:13:45 · 208 阅读 · 0 评论 -
手工实现ArrayList 之 增加泛型(2)
/**自定义实现一个ArrayList,体会底层原理 * 增加泛型 * @author Administrator * */public class SxtArrayList02<E> { private Object[] elementData; private int size; private static final int DEFAULT_CAPACI...原创 2018-09-27 16:11:53 · 472 阅读 · 0 评论 -
手动实现ArrayList 之数组扩容(3)
package com.jianshun;/**自定义实现一个ArrayList,体会底层原理 * 增加数组扩容 * @author Administrator * */public class SxtArrayList03<E> { private Object[] elementData; private int size; private static...原创 2018-09-27 16:13:15 · 442 阅读 · 0 评论 -
手动实现ArrayList 增加set和get方法,以及边界越界检查(4)
package com.jianshun;/** * 增加:set和get方法 * 增加:数组边界的检查 * @author 凡凡 * */public class SxtArrayList04<E> { private Object[] elementData; private int size; private static final int DEF...原创 2018-09-27 16:39:49 · 942 阅读 · 0 评论 -
遍历各种容器的方法汇总
遍历List 方法一:普通for 循环: for(int i=0; i<list.size();i++){ String temp = (String)list.get(i); System.out.println(temp); }遍历List 方法二:增强for循环(使用泛型) for(String temp : list){ System.o...原创 2018-10-08 17:01:54 · 1767 阅读 · 0 评论