java contions_Java数据结构与算法
特點:
在內(nèi)存中分配連續(xù)的空間,只存儲數(shù)據(jù),不存儲地址信息。位置就隱含著地址。
1
優(yōu)點:
1.節(jié)省存儲空間,因為分配給數(shù)據(jù)的存儲單元全用存放結(jié)點的數(shù)據(jù)(不考慮c/c++語言中數(shù)組需指定大小的情況), 結(jié)點之間的邏輯關(guān)系沒有占用額外的存儲空間。
2. 索引查找效率高,即每一個結(jié)點對應(yīng)一個序號,由該序號可以直接計算出來結(jié)點的存儲地址。 假設(shè)線性表的每個數(shù)據(jù)元素需占用K個存儲單元,并以元素所占的第一個存儲單元的地址作為數(shù)據(jù)元素的存儲地址。 則線性表中序號為i的數(shù)據(jù)元素的存儲地址LOC(a i )與序號為i+1 的數(shù)據(jù)元素的存儲地址LOC(a i+1 )之間的關(guān)系為
LOC(a i+1 ) = LOC(a i ) + K
通常來說,線性表的i號元素a i 的存儲地址為
LOC(a i ) = LOC(a 0 ) + i×K
其中LOC(a 0 )為 0 號元素a 0 的存儲地址,通常稱為線性表的起始地址。
缺點:
1.插入和刪除操作需要移動元素,效率較低。
2.必須提前分配固定數(shù)量的空間,如果存儲元素少,可能導(dǎo)致空閑浪費。
3.按照內(nèi)容查詢效率低,因為需要逐個比較判斷
無參構(gòu)造(一開始如果用戶沒設(shè)置集合大小,初始值就為10)
public ArrayList(){this(10); //數(shù)組大小初始為10
}
有參構(gòu)造(給用戶設(shè)置大小)
public ArrayList(intlen){
elementData= newObject[len];
}
集合容量不足時,每次擴(kuò)容增加50%
voidgrow(){//創(chuàng)建新的數(shù)組
Object []newArr= new Object[elementData.length + (elementData.length >> 1)];//擴(kuò)容1.5倍
for(int i = 0; i < size; i++){//將原來數(shù)組的內(nèi)容存到新數(shù)組里
newArr[i]=elementData[i];
}
elementData=newArr;
}
定義List接口
public interface List {//------- 添加 -------
voidadd(Object object);//------- 根據(jù)坐標(biāo)刪除 -------
void remove(intindex);//------- 根據(jù)內(nèi)容刪除 -------
voidremoveobj(Object object);//------- 取出數(shù)據(jù) -------
Object get(intindex);//------- 求集合的長度 -------
intsize();//------- 判斷集合是否為空 -------
booleanisEmpty();//------- 根據(jù)內(nèi)容找到元素坐標(biāo) -------
intIndexOf(Object object);//------- 判斷元素是否存在 -------
booleancontions(Object object);//------- 根據(jù)坐標(biāo)位置插入元素 -------
void add(intindex, Object object);//------- 修改元素 -------
void replase(intindex, Object object);//------- toString -------
String toString();//------- arraylist迭代器 -------
ArrayList.Ite iterator();
}
定義Iterator接口
public interface Iterator {booleanhasNext();
T next();
}
ArrayList實現(xiàn)類
public class ArrayList implements List {
public Object []elementData;//數(shù)組的引用
privateint size; //集合的大小,并非elementData.length
//如果用戶沒設(shè)置大小就初始為10
public ArrayList(){this(10); //數(shù)組大小初始為10
}//集合的大小等于用戶設(shè)置的大小
public ArrayList(intlen){
elementData= newObject[len];
}//數(shù)組的擴(kuò)容
voidgrow(){//創(chuàng)建新的數(shù)組
Object []newArr= new Object[elementData.length + (elementData.length >> 1)];//擴(kuò)容1.5倍
for(int i = 0; i < size; i++){//將原來數(shù)組的內(nèi)容存到新數(shù)組里
newArr[i]=elementData[i];
}
elementData=newArr;
}//在集合的尾部添加元素
publicvoidadd(Object object) {//如果數(shù)組長度不夠就調(diào)用擴(kuò)容
if(elementData.length <=size){
grow();
}
elementData[size]=object;//大小增加一位
size++;
}//根據(jù)坐標(biāo)刪除元素
publicvoid remove(intindex) {//判斷用戶是否輸入錯誤
if(index<0|| index >size-1){throw new IndexOutOfBoundsException("索引越界"+index);
}
Object element=elementData[index];//向前移動元素
for (int i = index; i
elementData[i]=elementData[i+1];
}//最后一個元素置為空
elementData[size-1]=null;
size--;
}//根據(jù)元素刪除
publicvoidremoveobj(Object object) {int index =IndexOf(object);//判斷用戶是否輸入錯誤!
if(index<0){throw newNullPointerException();
}
remove(index);
}//根據(jù)坐標(biāo)得到元素
public Object get(intindex) {returnelementData[index];
}//求集合的長度
publicintsize() {returnsize;
}//判斷是否為空
publicbooleanisEmpty() {return size == 0;
}//根據(jù)元素找到坐標(biāo)
publicintIndexOf(Object object) {int i = 0;while(i
}
i++;
}returni;
}//判斷元素是否存在
publicbooleancontions(Object object) {boolean flag = false;for(int i = 0; i < size; i++){if(elementData[i].equals(object)){
flag= true;break;
}
}returnflag;
}//根據(jù)坐標(biāo)位置添加元素
publicvoid add(intindex, Object object) {if(size >=elementData.length){
grow();
}for(int i = size; i > index; i--){
elementData[i]= elementData[i - 1];
}
elementData[index]=object;
size++;
}//修改元素
publicvoid replase(intindex, Object object) {
elementData[index]=object;
}//重寫toString
public String toString(){
StringBuilder str= new StringBuilder("[");for(int i = 0; i < size; i++){//判斷是否到了最后一位,如果到了就不添加,
if(i == size - 1){
str.append(elementData[i]);break;
}else{
str.append(elementData[i]+ ",");
}
}
str.append("]");returnstr.toString();
}//------- 迭代器 -------
public Ite iterator(){return newIte();
}
public class Iteimplements Iterator{int cursor = 0; //指向當(dāng)前元素,默認(rèn)是0
public ArrayList arr= newArrayList();
publicbooleanhasNext() {return cursor !=size;
}
public T next() {int i = cursor; //保留當(dāng)前值
cursor++;//自增
//進(jìn)行判斷,防止越界
if (i >size) {throw new RuntimeException("沒有元素");
}return(T) elementData[i];
}
}
}
自定義異常(不自定義也沒關(guān)系,java自帶也有)
public class IndexOutOfBoundsException extends RuntimeException{
public IndexOutOfBoundsException() { }
public IndexOutOfBoundsException(String message) {
super(message);
}
}
Java數(shù)據(jù)結(jié)構(gòu)與算法之ArrayList
原文:https://www.cnblogs.com/xiewangfei123/p/12933568.html
總結(jié)
以上是生活随笔為你收集整理的java contions_Java数据结构与算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java调用matlab 数组_JAVA
- 下一篇: nio2 java_java NIO2(