第一篇 集合与容器(一)

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());
    }
}

 

posted on 2018-08-20 21:22  奋斗的小刀001  阅读(144)  评论(0编辑  收藏  举报

导航