码迷,mamicode.com
首页 > 编程语言 > 详细

动态数组实现代码

时间:2019-01-28 23:54:01      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:return   new   otto   lse   imp   contains   wrap   equal   操作   


package array;

import java.util.Set;

public class Array<E> {
    private  E[]  data;
    private  int  size;//下一个要放置的位置索引  [0,size-1]是已经放置好的元素
    //有参构造
    public Array(int capacity) {
    	data=(E[])new Object[ capacity];//新建容量大小
    	size=0;//数组里元素个数
    }
    //无参构造
    public Array() {
    	this(10);
    }
    //判断是否为空
    public  boolean  isEmpty() {
    	return size==0;
    }
    //返回元素个数
    public int getSize() {
    	return size;
    }
    //向数组中添加元素
    public void add(E e) {
    	add(size,e);
    }
    //向头部添加元素
    public  void  addFirst(E e) {
    	add(0,e);
    }
    //添加元素
    public void add(int index,E e) {
    	if (index<0||index>size) {
    		throw  new  IllegalArgumentException("add  failed");
		}
    	if (size==data.length) {
    		resize(2*data.length);
    	}
    	for (int i = size-1; i >= index; i--) {
			data[i+1]=data[i];
		}
    	data[index]=e;
    	size++;
    }
    //扩容操作
    private void resize(int i) {
		E[]  newarr=(E[])new Object[i];
		for (int j = 0; j < size; j++) {
			newarr[j]=data[j];
		}
		data=newarr;
		
		
	}
	//打印数组
    @Override
    public  String  toString() {
		StringBuilder  res=new StringBuilder();
		res.append("size="+size+"acpiticy="+data.length+" ");
		res.append("[");
		for (int i = 0; i < size; i++) {
			res.append(data[i]);
			if (i!=size-1) {
				res.append(",");
			}
		}
		res.append("]");
    	
    	return res.toString();
    	
    }
    //取出元素
    public E get(int  index) {
    	if (index<0||index>=size) {
    		throw  new  IllegalArgumentException("get failed");
		}
    	
    	return data[index];
    }
    //给指定位置赋值
    public void  set(int  index,E  e) {
    	if (index<0||index>=size) {
    		throw  new  IllegalArgumentException("set failed");
		}
    	data[index]=e;
    	
    }
    //数组中是否包含制定元素
    public boolean  contains(E  e) {
    	for (int i = 0; i < size; i++) {
			if (data[i].equals(e)) {
				return true;
			}
		}
    	return false;
    }
    //数组指定元素的索引
    public  int  find(E  e) {
    	for (int i = 0; i < size; i++) {
			if (data[i].equals(e)) {
				return i;
			}
		}
    	return -1;
    }
    //删除第一个数
    public E removeFirst() {
    	return remove(0);
    }
    //删除最后一个数
    public E   removeLast() {
    	return remove(size-1);
    }
    //删除指定索引数
    public E  remove (int  index) {
    	if (index<0||index>=size) {
    		throw  new  IllegalArgumentException("remoce failed");
		}
    	E res=data[index];
    	for (int i =index+1 ; i < size; i++) {
			data[i-1]=data[i];
		}
    	
    	size--;
    	if(size==data.length/4) {
    		resize(data.length/2);
    	}
    	return res;
    	
    }
    //删除指定元素
    public void removeElement(E  e) {
    	int  index=find(e);
    	if (index!=-1) {
			remove(index);
		}
    }
}
 
1
package array;
2
3
import java.util.Set;
4
5
public class Array<E> {
6
    private  E[]  data;
7
    private  int  size;//下一个要放置的位置索引  [0,size-1]是已经放置好的元素
8
    //有参构造
9
    public Array(int capacity) {
10
        data=(E[])new Object[ capacity];//新建容量大小
11
        size=0;//数组里元素个数
12
    }
13
    //无参构造
14
    public Array() {
15
        this(10);
16
    }
17
    //判断是否为空
18
    public  boolean  isEmpty() {
19
        return size==0;
20
    }
21
    //返回元素个数
22
    public int getSize() {
23
        return size;
24
    }
25
    //向数组中添加元素
26
    public void add(E e) {
27
        add(size,e);
28
    }
29
    //向头部添加元素
30
    public  void  addFirst(E e) {
31
        add(0,e);
32
    }
33
    //添加元素
34
    public void add(int index,E e) {
35
        if (index<0||index>size) {
36
            throw  new  IllegalArgumentException("add  failed");
37
        }
38
        if (size==data.length) {
39
            resize(2*data.length);
40
        }
41
        for (int i = size-1; i >= index; i--) {
42
            data[i+1]=data[i];
43
        }
44
        data[index]=e;
45
        size++;
46
    }
47
    //扩容操作
48
    private void resize(int i) {
49
        E[]  newarr=(E[])new Object[i];
50
        for (int j = 0; j < size; j++) {
51
            newarr[j]=data[j];
52
        }
53
        data=newarr;
54
        
55
        
56
    }
57
    //打印数组
58
    @Override
59
    public  String  toString() {
60
        StringBuilder  res=new StringBuilder();
61
        res.append("size="+size+"acpiticy="+data.length+" ");
62
        res.append("[");
63
        for (int i = 0; i < size; i++) {
64
            res.append(data[i]);
65
            if (i!=size-1) {
66
                res.append(",");
67
            }
68
        }
69
        res.append("]");
70
        
71
        return res.toString();
72
        
73
    }
74
    //取出元素
75
    public E get(int  index) {
76
        if (index<0||index>=size) {
77
            throw  new  IllegalArgumentException("get failed");
78
        }
79
        
80
        return data[index];
81
    }
82
    //给指定位置赋值
83
    public void  set(int  index,E  e) {
84
        if (index<0||index>=size) {
85
            throw  new  IllegalArgumentException("set failed");
86
        }
87
        data[index]=e;
88
        
89
    }
90
    //数组中是否包含制定元素
91
    public boolean  contains(E  e) {
92
        for (int i = 0; i < size; i++) {
93
            if (data[i].equals(e)) {
94
                return true;
95
            }
96
        }
97
        return false;
98
    }
99
    //数组指定元素的索引
100
    public  int  find(E  e) {
101
        for (int i = 0; i < size; i++) {
102
            if (data[i].equals(e)) {
103
                return i;
104
            }
105
        }
106
        return -1;
107
    }
108
    //删除第一个数
109
    public E removeFirst() {
110
        return remove(0);
111
    }
112
    //删除最后一个数
113
    public E   removeLast() {
114
        return remove(size-1);
115
    }
116
    //删除指定索引数
117
    public E  remove (int  index) {
118
        if (index<0||index>=size) {
119
            throw  new  IllegalArgumentException("remoce failed");
120
        }
121
        E res=data[index];
122
        for (int i =index+1 ; i < size; i++) {
123
            data[i-1]=data[i];
124
        }
125
        
126
        size--;
127
        if(size==data.length/4) {
128
            resize(data.length/2);
129
        }
130
        return res;
131
        
132
    }
133
    //删除指定元素
134
    public void removeElement(E  e) {
135
        int  index=find(e);
136
        if (index!=-1) {
137
            remove(index);
138
        }
139
    }
140
}
141

动态数组实现代码

标签:return   new   otto   lse   imp   contains   wrap   equal   操作   

原文地址:https://www.cnblogs.com/pangpang321/p/10332122.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!