JAVA中的集合分为有序可重复的List接口和无序不可重复的set接口
实现了list接口的常用类:ArrayList类和LinkedList类。
ArrayList类底层的结构是动态数组,擅长查询。
LinkedList底层结构是链表,擅长插入删除。
ArrayList类的主要方法:
ArrayList的用法(转载)
写一个简单的模仿ArrayList类的简单类:
实现add(),remove(),get(),set()方法。
1 package Collection; 2 3 public class MyArrayList { 4 private Object[] objs; 5 private int size; 6 private int lenth; 7 8 public Object[] getObjs() { 9 return objs; 10 } 11 public int getSize() { 12 return size; 13 } 14 public int getLenth() { 15 return lenth; 16 } 17 public void setLenth(int lenth) { 18 if(lenth < 0){ 19 try { 20 throw new Exception(); 21 } catch (Exception e) { 22 // TODO Auto-generated catch block 23 e.printStackTrace(); 24 } 25 } 26 this.lenth = lenth; 27 } 28 public MyArrayList(){ 29 this.lenth = 10; 30 this.objs = new Object[lenth]; 31 } 32 public MyArrayList(int lenth) { 33 if(lenth < 0){ 34 try { 35 throw new Exception(); 36 } catch (Exception e) { 37 // TODO Auto-generated catch block 38 e.printStackTrace(); 39 } 40 } 41 this.objs = new Object[lenth]; 42 } 43 public boolean add(Object obj){ 44 Object[] oldObjectList = this.objs; 45 if(this.size == this.objs.length){ 46 this.objs = new Object[2 * this.objs.length + 1]; 47 } 48 System.arraycopy(oldObjectList, 0, this.objs, 0, this.size); 49 this.objs[this.size++] = obj; 50 return true; 51 } 52 public Object remove(int index){ 53 Object obj = get(index); 54 Object[] oldObjectList = this.objs; 55 this.objs = new Object[this.size]; 56 for(int i = 0; i < this.size; i++){ 57 if(i < index){ 58 this.objs[i] = oldObjectList[i]; 59 }else if(i >= index){ 60 this.objs[i] = oldObjectList[i + 1]; 61 } 62 } 63 this.size--; 64 return obj; 65 } 66 public Object get(int index){ 67 checkBound(index); 68 return this.objs[index]; 69 } 70 public Object set(int index, Object obj){ 71 Object old = this.objs[index]; 72 this.objs[index] = obj; 73 return old; 74 } 75 private void checkBound(int index){ 76 if(index < 0 || index > size){ 77 try { 78 throw new Exception(); 79 } catch (Exception e) { 80 // TODO Auto-generated catch block 81 e.printStackTrace(); 82 } 83 } 84 } 85 }
检测类:
1 package Collection; 2 3 public class test { 4 public static void main(String args[]){ 5 MyArrayList mal = new MyArrayList(); 6 for(int i = 0; i < 9; i++){ 7 mal.add(i); 8 } 9 System.out.println(mal.getSize()); 10 for(int i = 0; i < 9; i++){ 11 System.out.print(mal.get(i) + " "); 12 } 13 System.out.println(); 14 mal.remove(1); 15 System.out.println(mal.getSize()); 16 for(int i = 0; i < 8; i++){ 17 System.out.print(mal.get(i) + " "); 18 } 19 mal.set(1, 10); 20 System.out.println(); 21 for(int i = 0; i < 8; i++){ 22 System.out.print(mal.get(i) + " "); 23 } 24 } 25 }
结果:
比较简单,没写注释,凑活着看吧。