集合框架:
自定义数据结构(增删改查等)
package 数组;
/**
* 创建动态数组
* @author 百合
*
*/
public class ArrayDemo{
//定义一个数组来存放数据
String[] src = new String[0];
/**
* 增加元素加入容器
* @param s要加入容器的个数
*/
public void add(String s){
//创建一个新的数组,长度为src+1;
String[] dest = new String[src.length+1];
//将新加入的数组放在数组的最后一位
dest[dest.length-1] = s;
//将src数组的值copy到dest数组里面
for(int i = 0;i<src.length;i++){
dest[i] = src[i];
}
//将src指向新数组
src = dest;
}
/**
* 获取元素的地址
* @param index
* @return
*/
public String get(int index){
return src[index];
}
/**
* 修改指定位置的元素
* @param index修改的元素位置
* @param s修改后的新元素
*/
public void update(int index,String s){
if(index >=0 && index<size()){
src[index]= s;
}else{
System.out.println("指定的下标超出范围");
}
}
/**
* 将指定的元素插入到指定的位置
*/
public void insert(int index,String s){
if(index>=0 && index <size()){
String[] dest = new String[src.length+1];
//将插入的数组放到指定的位置
dest[index] = s;
for(int i = 0;i < index;i++){
dest[i] = src[i];
}
for(int i = index;i<src.length;i++){
dest[i+1] = src[i];
}
//将src指新数组
src = dest;
}else{
System.out.println("指定的下标超出范围");
}
}
/**
* 删除指定位置的元素
* @param inde下标的元素
*/
public void dalete(int index){
String[] dest = new String[src.length-1];
for(int i = 0;i<index;i++){
dest[i] = src[i];
}
for(int i = index +1;i<src.length;i++ ){
dest[i-1] = src[i];
}
src = dest;
}
/**
*
* @return 返回得到容器的元素的个数
*
*/
public int size(){
return src.length;
}
}
//测试ArrayDemo数组
//泛型的类类型,可以调用方法
package 数组;
public class ArrayTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//获得系统时间
long t1 = System.currentTimeMillis();
System.out.println(t1);
ArrayDemo am = new ArrayDemo();
am.add("元素1");
am.add("元素2");
am.add("元素3");
am.add("元素4");
am.add("元素5");
//am.dalete(4);
am.insert(0,"元素六");
long t2 = System.currentTimeMillis();
System.out.println(t2);
//遍历
for(int i = 0;i<am.size();i++){
String num = am.get(i);
System.out.println(num);
System.out.println(Math.abs(t2-t1));
}
System.out.println(Math.abs(t2-t1));
}
}
//修改后的数组,使用泛型可以存储任意的类型
/**
* 动态数组,用来装任意类型的动态数组
*
* @author 百合
*
*/
public class ArrayQueue<E> {
private int len = 0;// 长度
private int initContiner;// 初始容量
private int rate;// 增长比率
// 定义一个用来存放数据的数组
// 初始长度为0,表示没有装任何数据
Object[] src;
public ArrayQueue() {
this.initContiner = 10;
this.rate = 10;
src = new Object[initContiner];
}
// 创建容器对象的时候指定容量和增长比率
public ArrayQueue(int initContiner, int rate) {
this.initContiner = initContiner;
this.rate = rate;
src = new Object[initContiner];
}
/**
* 将指定的元素加入容器
*
* @param s
* 要加入到容器中的元素
*/
public void add(E s) {
// 如果长度小于容量,就将元素放到数组第一个为null的位置
if (len >= src.length) {
// 创建新数组
// 定义一个新数组,用来装数据,长度比src+1
Object[] dest = new Object[src.length + rate];
// 将源数组中的数据按照下标顺序拷贝到新数组
System.arraycopy(src, 0, dest, 0, len);
src = dest;
}
src[len] = s;
len++;
}
/**
* 获取指定下标位置的元素
*
* @param index
* 要获取的元素的下标
* @return 返回获取到的元素
*/
public E get(int index) {
return (E) src[index];
}
/**
* 修改指定位置元素的值
*
* @param index要修改的元素位置
* @param s
* 修改后的新元素
*/
public void update(int index, E s) {
if (index >= 0 && index < size()) {
src[index] = s;
} else {
System.out.println("指定的下标超出范围!!!");
}
}
/**
* 将指定元素插入到指定位置
*
* @param index
* 要插入元素的位置
* @param s
* 要插入的新元素
*/
public void insert(int index, E s) {
if (index >= 0 && index < size()) {
// 定义新数组,长度比原数组+1
Object[] dest = new Object[src.length + 1];
// 将新元素放到新数组的指定位置
dest[index] = s;
// 将源数组中下标<index,拷贝到新数组相同的下标位置
for (int i = 0; i < index; i++) {
dest[i] = src[i];
}
// 将源数组中其他下标的元素拷贝到新数组下标+1的位置
for (int i = index; i < src.length; i++) {
dest[i + 1] = src[i];
}
// 将src指向新数组
src = dest;
} else {
System.out.println("指定的下标超出范围!!!");
}
}
/**
* 删除指定位置的元素
*
* @param index
* 要删除的元素的下标
*/
public void delete(int index) {
if (index >= 0 && index < size()) {
// 定义新数组,长度是原始数组长度-1
Object[] dest = new Object[src.length - 1];
// 如果下标<index,则按下标位置拷贝
for (int i = 0; i < index; i++) {
dest[i] = src[i];
}
// index位置的值丢掉不需要拷贝
// >index的下标位置拷贝到新数组下标-1的位置
for (int i = index + 1; i < src.length; i++) {
dest[i - 1] = src[i];
}
// 将src指向新数组
src = dest;
} else {
System.out.println("指定的下标超出范围!!!");
}
}
/**
* 获得容器中元素个数的方法 容器中不为null的元素个数
*
* @return 返回元素的个数
*/
public int size() {
return len;
}
}
//测试
public class MainDemo {
public static void main(String[] args) {
// 在创建容器对象的时候,将泛型具体化
ArrayQueue<String> queue = new ArrayQueue<String>();
//获得系统时间
long t1 = System.currentTimeMillis();
for (int i = 0; i < 10; i++) {
queue.add("元素" + i);
}
queue.add("新元素");
long t2 = System.currentTimeMillis();
for (int i = 0; i < queue.size(); i++) {
String s = queue.get(i);
System.out.println(s);
}
System.out.println(Math.abs(t2-t1));
}
}
//上述的两个是对数据的存取速度进行比较,第二种的速度比第一种的开辟速度快很多
java的API中有一系列的方法可以供调用,例如:list set map等