第一篇 集合与容器(一)
package com.zzp.demo; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * * 泛型的使用 * @author java * */ public class TestGeneric { public static void main(String[] args) { // TODO Auto-generated method stub MyCollection<String> mc = new MyCollection<String>(); mc.set("dhfjs", 0); String b = (String) mc.get(0); System.out.println("b:"+b); List list = new ArrayList(); Map map = new HashMap(); } } class MyCollection<E>{ Object[] objs = new Object[5]; public void set(E e,int index){ objs[index] = e; } public E get(int index){ return (E)objs[index]; } }
package com.zzp.demo; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * * 测试collection中的方法 * @author java * */ public class TestList { public static void main(String[] args) { test03(); } public static void test01(){ Collection<String> c = new ArrayList<>(); System.out.println(c.size()); System.out.println(c.isEmpty()); c.add("张三"); c.add("张四"); System.out.println(c); System.out.println(c.size()); c.contains("张三"); Object[] a = c.toArray(); c.remove("张四"); System.out.println(c); c.clear(); System.out.println(c.size()); } public static void test02(){ List<String> list01 = new ArrayList<>(); list01.add("aa"); list01.add("bb"); list01.add("cc"); List<String> list02 = new ArrayList<>(); list02.add("aa"); list02.add("dd"); list02.add("ee"); System.out.println("list01:"+list01); list01.addAll(list02); System.out.println("list01:"+list01); list01.removeAll(list02); System.out.println("list01:"+list01); list01.retainAll(list02); System.out.println("list01:"+list01); System.out.println(list01.contains(list02)); } public static void test03(){ List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); System.out.println(list); list.add(2, "张三"); System.out.println(list); list.remove(2); System.out.println(list); list.set(2, "李四"); System.out.println(list); System.out.println(list.get(0)); list.add("C"); list.add("B"); list.add("A"); System.out.println(list); System.out.println(list.indexOf("A")); System.out.println(list.lastIndexOf("A")); System.out.println(list.indexOf("张三")); System.out.println(list.lastIndexOf("张三")); } }
第一版
package com.zzp.demo.myCollection; /** * * 自定义实现一个ArrayList 体会一个底层实现 * @author java * */ public class ArrayList01 { private Object[] elementData; private int size; private static final int DEFALT_CAPACITY = 10; public ArrayList01 () { elementData = new Object[DEFALT_CAPACITY]; } //自定义数组长度 public ArrayList01 (int capacity){ elementData = new Object[capacity]; } //添加元素的方法 public void add(Object obj){ elementData[size ++] = obj; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("["); for(int i=0;i<size;i++){ sb.append(elementData[i] + ","); } sb.setCharAt(sb.length() - 1, ']'); return sb.toString(); } public static void main(String[] args) { ArrayList01 al = new ArrayList01(20); al.add("aa"); al.add("bb"); System.out.println(al); } }
第二版
package com.zzp.demo.myCollection; /** * * 自定义实现一个ArrayList 体会一个底层实现 * 增加泛型 * @author java * */ public class ArrayList02<E> { private Object[] elementData; private int size; private static final int DEFALT_CAPACITY = 10; public ArrayList02 () { elementData = new Object[DEFALT_CAPACITY]; } //自定义数组长度 public ArrayList02 (int capacity){ elementData = new Object[capacity]; } //添加元素的方法 public void add(E element){ elementData[size ++] = element; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("["); for(int i=0;i<size;i++){ sb.append(elementData[i] + ","); } sb.setCharAt(sb.length() - 1, ']'); return sb.toString(); } public static void main(String[] args) { ArrayList02<String> al = new ArrayList02<>(20); al.add("aa"); al.add("bb"); System.out.println(al); } }
第三版
package com.zzp.demo.myCollection; /** * * 自定义实现一个ArrayList 体会一个底层实现 * 增加数组扩容 * @author java * */ public class ArrayList03<E> { private Object[] elementData; private int size; private static final int DEFALT_CAPACITY = 10; public ArrayList03 () { elementData = new Object[DEFALT_CAPACITY]; } //自定义数组长度 public ArrayList03 (int capacity){ elementData = new Object[capacity]; } //添加元素的方法,数组扩容 public void add(E element){ //什么时候扩容 if(size == elementData.length){ //怎么扩容 Object[] newArray = new Object[elementData.length + (elementData.length >> 1)]; System.arraycopy(elementData, 0, newArray, 0, elementData.length); elementData = newArray; } elementData[size ++] = element; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("["); for(int i=0;i<size;i++){ sb.append(elementData[i] + ","); } sb.setCharAt(sb.length() - 1, ']'); return sb.toString(); } public static void main(String[] args) { ArrayList03<String> al = new ArrayList03<>(); for(int i = 0;i<40;i++){ al.add("ad" + i); } System.out.println(al); } }
第四版
package com.zzp.demo.myCollection; /** * * 自定义实现一个ArrayList 体会一个底层实现 * 增加数组边界的检查 * @author java * */ public class ArrayList04<E> { private Object[] elementData; private int size; private static final int DEFALT_CAPACITY = 10; public ArrayList04 () { elementData = new Object[DEFALT_CAPACITY]; } //自定义数组长度 public ArrayList04 (int capacity){ if(capacity < 0){ throw new RuntimeException(); } else if(capacity == 0){ elementData = new Object[DEFALT_CAPACITY]; }else{ elementData = new Object[capacity]; } } //添加元素的方法,数组扩容 public void add(E element){ //什么时候扩容 if(size == elementData.length){ //怎么扩容 Object[] newArray = new Object[elementData.length + (elementData.length >> 1)]; System.arraycopy(elementData, 0, newArray, 0, elementData.length); elementData = newArray; } elementData[size ++] = element; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("["); for(int i=0;i<size;i++){ sb.append(elementData[i] + ","); } sb.setCharAt(sb.length() - 1, ']'); return sb.toString(); } //获取索处的对象 public E get(int index){ checkIndex(index); return (E) elementData[index]; } //设置索引处的对象 public void set(E element,int index){ checkIndex(index); elementData[index] = element; } //判断索引是否合法 public void checkIndex(int index){ if(index < 0 || index > size -1){ throw new RuntimeException("索引不合法" + index); } } public static void main(String[] args) { ArrayList04<String> al = new ArrayList04<>(); for(int i = 0;i<40;i++){ al.add("ad" + i); } System.out.println(al); al.set("shdfhus", 0); System.out.println(al.get(110)); } }
第五版
package com.zzp.demo.myCollection; /** * * 自定义实现一个ArrayList 体会一个底层实现 * 增加删除操作 * @author java * */ public class ArrayList05<E> { private Object[] elementData; private int size; private static final int DEFALT_CAPACITY = 10; public ArrayList05 () { elementData = new Object[DEFALT_CAPACITY]; } //自定义数组长度 public ArrayList05 (int capacity){ if(capacity < 0){ throw new RuntimeException(); } else if(capacity == 0){ elementData = new Object[DEFALT_CAPACITY]; }else{ elementData = new Object[capacity]; } } //添加元素的方法,数组扩容 public void add(E element){ //什么时候扩容 if(size == elementData.length){ //怎么扩容 Object[] newArray = new Object[elementData.length + (elementData.length >> 1)]; System.arraycopy(elementData, 0, newArray, 0, elementData.length); elementData = newArray; } elementData[size ++] = element; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("["); for(int i=0;i<size;i++){ sb.append(elementData[i] + ","); } sb.setCharAt(sb.length() - 1, ']'); return sb.toString(); } //获取索处的对象 public E get(int index){ checkIndex(index); return (E) elementData[index]; } //设置索引处的对象 public void set(E element,int index){ checkIndex(index); elementData[index] = element; } //判断索引是否合法 public void checkIndex(int index){ if(index < 0 || index > size -1){ throw new RuntimeException("索引不合法" + index); } } //删除操作 public void remove(E element){ //element 将其和所有元素进行比较,获得第一个比较为true的,返回 for(int i=0;i < size;i++){ if(element.equals(get(i))){ remove(i); } } } //删除操作 public void remove(int index){ int num = elementData.length - size -1; if(num > 0){ System.arraycopy(elementData, index + 1, elementData, index, num); } elementData[--size] = null; } //获取长度 public int size(){ return size; } //是否为空 public boolean isEmpty(){ return size > 0 ? false : true; } public static void main(String[] args) { ArrayList05<String> al = new ArrayList05<>(); for(int i = 0;i<40;i++){ al.add("ad" + i); } System.out.println(al); al.set("shdfhus", 0); System.out.println(al.get(1)); al.remove(2); System.out.println(al); System.out.println(al.size()); System.out.println(al.isEmpty()); } }