目录
1.移除元素
2.删除有序数组中的重复项
3.合并两个有序数组
4.实现ArrayList类
4.下列在Java语言中关于数据类型和包装类的说法,正确的是()
5. boolean类型没有包装用的类,这句话是否正确?
1.移除元素

这里使用双指针法来实现,如果不是要找的val值就把值赋值给left,这样就可以排除val来计算新数组的长度。
class Solution {
    public int removeElement(int[] nums, int val) {
      int j = 0;
      for(int i = 0; i < nums.length; i++){
        if(nums[i] != val){
            nums[j++] = nums[i];
        }
      }
      return j;
    }
} 
2.删除有序数组中的重复项

因为数组是有序的所以重复的元素都在一起,只需要前面的值与后面的值相比较就好了,如果不同键j向前移动,进行计数最后得到数组没有重复数字的长度。
class Solution {
    public int removeDuplicates(int[] nums) {
        int i = 1,j = 1;
       while(i < nums.length){
        if(nums[i] != nums[i - 1]){
            nums[j] = nums[i];
            j++;
        }
        i++;
       }
       return j;
    }
}
      
3.合并两个有序数组
 
class Solution {
 
     public static void merge(int[] nums1, int m, int[] nums2, int n) {
        int k = m + n -1;
        int i = m - 1;
        int j = n - 1;//从末尾开始比较
        while( i >= 0 && j >= 0){
            if(nums1[i] >= nums2[j]){
                nums1[k] = nums1[i];
                i--;
            }else{
                nums1[k] = nums2[j];
                j--;
            }
            k--;
        }
        //如果 i 走完 j 没走完 说明 nums1中的数字大于nums2中的数字 此时队例还没满j还要继续添加
        // 如果 i 没走完 j 走完 说明j中的全部数字已经充满数组并且剩下的nums[i]中的数字都是按照顺序排的  比如数组nums1 = {0,5,7} nums2 = {1,2,3,9}
        while(j >= 0){
            nums1[k] = nums2[j];
            j--;
            k--;
        }
    }
} 
4.实现ArrayList类
import java.util.Arrays;
public class MyArraylist {
    public int[] elem;
    public int usedSize;//0
    //默认容量
    private static final int DEFAULT_SIZE = 10;
    public MyArraylist() {
        this.elem = new int[DEFAULT_SIZE];
    }
    /**
     * 打印顺序表:
     * 根据usedSize判断即可
     */
    public void display() {
        for (int i = 0; i < elem.length; i++) {
            System.out.print(elem[i] + " ");
        }
        System.out.println();
    }
    // 新增元素,默认在数组最后新增
    public void add(int data) {
        if (isFull()) {
            resize();
        }
        this.elem[usedSize] = data;
        this.usedSize++;
    }
    private void resize() {
        this.elem = Arrays.copyOf(this.elem,2 * this.elem.length);
    }
    /**
     * 判断当前的顺序表是不是满的!
     *
     * @return true:满   false代表空
     */
    public boolean isFull() {
        return this.usedSize == elem.length;
    }
    private boolean checkPosInAdd(int pos) throws PosILLegal {
       if(pos < 0 || pos > usedSize){
           throw new PosILLegal("这个位置不合法");
       }
        return true;//合法
    }
    // 在 pos 位置新增元素
    public void add(int pos, int data) {
        try {
            checkPosInAdd(pos);
            if (isFull()) {
                resize();
            }
            for (int i = usedSize; i <= pos; i--) {
                elem[i + 1] = elem[i];
            }
            elem[pos] = data;
            usedSize++;
        } catch (PosILLegal e) {
            e.printStackTrace();
        }
    }
    // 判定是否包含某个元素
    public boolean contains(int toFind) {
        for (int i = 0; i < usedSize; i++) {
            if (elem[i] == toFind) {
                return true;
            }
        }
        return false;
    }
    // 查找某个元素对应的位置
    public int indexOf(int toFind) {
        for (int i = 0; i < usedSize; i++) {
            if (elem[i] == toFind) {
                return i;
            }
        }
        return -1;
    }
    // 获取 pos 位置的元素
    public int get(int pos) {
        try {
            checkPosInAdd(pos);
            checkEmpty();
            return elem[pos];
        } catch (PosILLegal e) {
            
            e.printStackTrace();
        } catch (EmptyException e) {
            e.printStackTrace();
        }
        return -1;
    }
    private void checkEmpty() throws EmptyException{
        if (isEmpty()) {
            throw new EmptyException("顺序表为空");
        }
    }
    private boolean isEmpty() {
            return this.usedSize == 0;
}
    // 给 pos 位置的元素设为【更新为】 value
    public void set(int pos, int value) {
        try {
            checkPosInAdd(pos);
            checkEmpty();
            elem[pos] = value;
        } catch (PosILLegal e) {
            e.printStackTrace();
        } catch (EmptyException e) {
            e.printStackTrace();
        }
    }
    /**
     * 删除第一次出现的关键字key
     *
     * @param key
     */
    public void remove(int key) {
        try {
            checkEmpty();
            int pos = indexOf(key);
            if (pos == -1) {
                return;
            }
            for (int i = pos; i < usedSize - 1; i++) {
                elem[i] = elem[i + 1];
            }
            usedSize--;
        } catch (EmptyException e) {
            e.printStackTrace();
        }
    }
    // 获取顺序表长度
    public int size() {
        return this.usedSize;
    }
    // 清空顺序表
    public void clear() {
        usedSize = 0;
    }
} 
4.下列在Java语言中关于数据类型和包装类的说法,正确的是()
A.基本(简单)数据类型是包装类的简写形式,可以用包装类替代基本(简单)数据类型
B. long和double都占了64位(64bit)的存储空间。
C.默认的整数数据类型是int,默认的浮点数据类型是float。
D.和包装类一样,基本(简单)数据类型声明的变量中也具有静态方法,用来完成进制转化等
答案:B
A基本数据类型不是包装类型的简写
C浮点数默认是double
D基本数据类型不能调用方法
5. boolean类型没有包装用的类,这句话是否正确?
A.正确
B.错误
答案:B
Boolean就是它的包装类



















