java 数据结构--顺序表
2017-11-14 11:33
183 查看
DEMO地址:https://github.com/zhaopingfu/MDataStruct
在java中,最常用的顺序表就是ArrayList
优点:查找,修改元素效率高
缺点:增加,删除元素效率低
在ArrayList中,数据是存储一个Object类型的数组中的,而且有一个扩容因子,当达到这个扩容因子且不超过int最大值的时候就扩容,每次扩容后的大小都是之前数组长度的两倍
这里的扩容是新建一个数组,长度是之前数组长度的两倍,然后将之前数组中的数据全部拷贝到新的数组中,再将新创建的这个数组赋值给ArrayList中的数组对象
个人写了一个ArrayList,实现了增删改查的功能
在java中,最常用的顺序表就是ArrayList
优点:查找,修改元素效率高
缺点:增加,删除元素效率低
在ArrayList中,数据是存储一个Object类型的数组中的,而且有一个扩容因子,当达到这个扩容因子且不超过int最大值的时候就扩容,每次扩容后的大小都是之前数组长度的两倍
这里的扩容是新建一个数组,长度是之前数组长度的两倍,然后将之前数组中的数据全部拷贝到新的数组中,再将新创建的这个数组赋值给ArrayList中的数组对象
个人写了一个ArrayList,实现了增删改查的功能
package com.pf; public class MArrayList<T> { private static final int DEFAULT_CAPACITY = 4; private static final float DEFAULT_FACTOR = 0.75f; private static final float MAX_CAPACITY = Integer.MAX_VALUE; private Object[] datas; private int size; public MArrayList() { datas = new Object[DEFAULT_CAPACITY]; } public boolean add(T data) { checkCapacity(); datas[size++] = data; return true; } public boolean add(int index, T data) { checkIndex(index); checkCapacity(); System.arraycopy(datas, index, datas, index + 1, size - index); datas[index] = data; size++; return true; } public T remove(int index) { checkIndex(index); T oldData = elementData(index); int numMoved = size - index - 1; if (numMoved > 0) { System.arraycopy(datas, index + 1, datas, index, size - index - 1); } datas[--size] = null; return oldData; } public boolean remove(Object o) { if (o == null) { for (int i = 0; i < size; i++) { if (datas[i] == null) { fastRemove(i); return true; } } } else { for (int i = 0; i < size; i++) { if (o.equals(datas[i])) { fastRemove(i); return true; } } } return false; } private void fastRemove(int index) { int numMoved = size - index - 1; if (numMoved > 0) { System.arraycopy(datas, index + 1, datas, index, size - index - 1); } datas[--size] = null; } public T set(int index, T newData) { checkIndex(index); T oldData = elementData(index); datas[index] = newData; return oldData; } public T get(int index) { checkIndex(index); return elementData(index); } public int size() { return size; } @SuppressWarnings("unchecked") T elementData(int index) { return (T) datas[index]; } private void checkIndex(int index) { if (index < 0 || index >= size) { throw new ArrayIndexOutOfBoundsException("index is " + index + ", size is " + size); } } private void checkCapacity() { if (size / datas.length < DEFAULT_FACTOR) { return; } if (datas.length * 2 >= MAX_CAPACITY) { throw new RuntimeException("The array length is the largest"); } Object[] newData = new Object[datas.length * 2]; System.arraycopy(datas, 0, newData, 0, size); datas = newData; } }
相关文章推荐
- Java 数据结构 自定义顺序表
- java 中的JDK封装的数据结构和算法解析(集合类)----顺序表 List 之 ArrayList
- JAVA数据结构---顺序表
- JAVA数据结构---顺序表
- 数据结构的Java实现——顺序表
- JAVA数据结构---顺序表
- JAVA数据结构---顺序表
- 数据结构-顺序表 java实现
- JAVA数据结构---顺序表
- Java与数据结构(一) 顺序表
- JAVA数据结构---顺序表
- JAVA数据结构---顺序表
- java实现数据结构-线性表-顺序表,实现插入,查找,删除,合并功能
- 数据结构的Java实现——顺序表
- 数据结构(java语言描述)线性表-顺序表
- Java数据结构-线性表之顺序表ArrayList
- 数据结构-顺序表Java简单实现
- 数据结构Java实现02----线性表与顺序表
- 数据结构的Java实现——顺序表
- 数据结构Java实现02----线性表与顺序表