数据结构与算法 - 数组
2017-11-28 00:00
381 查看
理解一下简单的算法,结果越来越像ArrayList实现了。
package com.jomster.数组拓展; import java.util.Arrays; import java.util.stream.Stream; public class ArrayExpand<T extends Comparable<T>> { private Object[] arrayExpand; private int elements; private int expandSpace = 50; public ArrayExpand() { this(50); } public ArrayExpand(int initialCapacity) { this.arrayExpand = new Object[initialCapacity]; } /** * 线性添加数据 * * @param t */ public void add(T t) { if (elements + 1 == arrayExpand.length) { } else { arrayExpand[elements] = t; elements++; } } /** * 获取该坐标的数据 * * @param index * @return */ public T get(int index) { if (index >= elements || index < 0) { throw new ArrayIndexOutOfBoundsException("你获取的坐标超限"); } return (T) arrayExpand[index]; } /** * 打印数据 */ public void print() { Stream is = Arrays.stream(arrayExpand).filter(n -> n != null); is.forEach(i -> System.out.println("arr value = " + i)); } /** * 查询数据坐标(线性查询) */ public int search(T t) { for (int i = 0; i < elements; i++) { if (t == (T) arrayExpand[0]) { return i; } } return -1; } /** * 删除数据 * * @param index */ public void delete(int index) { if (index >= elements || index < 0) { throw new ArrayIndexOutOfBoundsException("你获取的坐标超限"); } for (int i = index; i < elements - 1; i++) { arrayExpand[i] = arrayExpand[i + 1]; } elements--; arrayExpand[elements] = null; } /** * 修改数据 * * @param index * @param t */ public void change(int index, T t) { if (index >= elements || index < 0) { throw new ArrayIndexOutOfBoundsException("你获取的坐标超限"); } else { arrayExpand[index] = t; } } /** * 有序数组,从小到大 * * @param t */ public void addSort(T t) { if (elements + 1 == arrayExpand.length) { } else { if (elements == 0) { arrayExpand[elements] = t; elements++; } else { int i; for (i = 0; i < elements; i++) { if (t.compareTo((T) arrayExpand[i]) < 0) { break; } } for (int j = elements; j > i; j--) { arrayExpand[j] = arrayExpand[j - 1]; } arrayExpand[i] = t; elements++; } } } /** * 二分法查找 * @param t * @return */ public int binarySearch(T t) { int middle = 0; int pow = elements - 1; int low = 0; while (true) { middle = (pow + low) / 2; if (t.compareTo((T) arrayExpand[middle]) == 0) { return middle; } else if (low > pow) { return -1; } else { if (t.compareTo((T) arrayExpand[middle]) > 0) { low = middle + 1; } else { pow = middle - 1; } } } } }
相关文章推荐
- 数据结构与算法之—数组(一)
- 数据结构与算法之数组
- #数据结构与算法学习笔记#剑指Offer1:二维数组中的查找(JAVA)
- JavaScript数据结构与算法Item1--数组
- 【数据结构与算法】数组应用3:稀疏矩阵压缩(Java实现)
- 数据结构与算法:数组(一)
- 数据结构与算法:数组
- Java数据结构与算法之数组(一)
- 数据结构——算法之(006)(求子数组的最大和)
- 数据结构与算法-----队列-使用数组(顺序结构)实现
- 【数据结构与算法基础】以数组实现的循环队列 / Circular Queue implemented by array
- 【数据结构与算法】数组应用4:多项式计算Java版
- 数据结构与算法-求子数组的最大和
- Java数据结构与算法之数组排序——奇偶排序
- 【数据结构与算法】数组应用1:矩阵乘法(Java实现)
- 数据结构与算法01 之数组
- Javascript数据结构与算法---数组
- 数据结构与算法之动态数组实现堆栈
- 数据结构与算法[LeetCode]—两个有序数组合并及找中点问题
- 数据结构与算法学习笔记——链表部分实现(数组形式)