/**
* /**
该题难度系数较高,是对一维数组组、循环、选择语句、封装思想的一个综合练习题
对将来学习的字符串,StringBuffer\StringBuilder,集合和IO都会有很大的帮助
题目:去除数组中的重复元素
比如原数组为int[] arr = {1,1,2,2,3,4,6,6};
去重后为int[] arr = {1,2,3,4,6};
用自定义类(MyArrayList实质就是一个容器)去实现以上需求。
以下是自定义类的大体框架,将代码填写完整
* @author Administrator
*
*/
public class MyArrayList {
/**
* 定义一个基础长度为2的数组作为容器;
*/
private int[] array = new int[2];;
/**
* 设置计数器count,计数,并作为数组下标
*/
private int count;
/**
* 设置一个钥匙key,用于当数组容量超出时,创建新数组的容量与原数组的递增关系
*/
private int key = 1;
//private String str;
/**
将num添加到容器中
*/
public void add(int num){
if (count == array.length - 1){
int[] temp = array;
array = new int[2*(++key)];
for (int i = 0; i < temp.length; i++) {
array[i] = temp[i];
}
}
array[count++] = num;
}
/**
获取容器中某个位置所对应的数据
*/
public int get(int index){
int data = array[index];
return data;
}
/**
将该容器对象转换成数组对象
*/
public int[] toArray(){
int[] arrays = new int[count];
for (int i = 0; i < count; i++) {
arrays[i] = array[i];
}
return arrays;
}
/**
获取该容器中存储了多少个数据
*/
public int size(){
return count;
}
/**
判断num是否存在于该容器中,如果存在返回true
*/
public boolean contains(int num){
for (int i = 0; i < count; i++) {
if (num == array[i]) {
return true;
}
}
return false;
}
/**
删除数组中的所有元素
*/
public void clear(){
count = 0;
}
/**
判断该容器是为空,如果该容器中有数据返回true,否则返回false
*/
public boolean isEmpty(){
if (array.length == 0) {
return false;
}
return true;
}
/**
显示容器中的所有数据,比如容器中有1,2,4
返回值应该是[1,2,4]
*/
public String toString(){
String str = "[";
for (int i = 0; i < count; i++) {
if (i == count - 1) {
str = str + array[i];
}else {
str = str + array[i] + ",";
}
}
str += "]";
return str;
}
/**
判断传入的容器中的数据是不是和我当前容器中的数据相同
*/
public boolean equals(Object obj){
if (! (obj instanceof MyArrayList)) {
return false;
}
MyArrayList mal = (MyArrayList) obj;
if (this.size() != mal.size()) {
return false;
}
boolean sign = true;
for (int i = 0; i < count;i++) {
if (this.array[i] == mal.toArray()[i]) {
sign = true;
}else {
sign = false;
break;
}
}
return sign;
}
/**
* deleteRepeat(删除重复)
*/
public int[] deleteRepeat(int[] arr) {
int key = 0;
for (int i = 0; i < arr.length; i++) {
if (this.size() == 0) {
key = arr[i];
this.add(arr[i]);
}else if(arr[i] != key) {
key = arr[i];
this.add(arr[i]);
}
}
return this.toArray();
}
/**
测试方法
*/
public static void main(String[] args){
//demo1();
//demo2();
/*
* 题目:去除数组中的重复元素
比如原数组为int[] arr = {1,1,2,2,3,4,6,6};
去重后为int[] arr = {1,2,3,4,6};
*/
int[] arr = {1,1,2,2,3,4,6,6};
MyArrayList ml = new MyArrayList();
int[] arr1 = ml.deleteRepeat(arr);
System.out.println(ml);
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);
}
}
private static void demo2() {
MyArrayList mal = new MyArrayList();
mal.add(10);
mal.add(11);
mal.add(12);
mal.add(13);
mal.add(14);
/*将容器转化成数组并进行遍历*/
int[] arr = mal.toArray();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("----------");
/*判断容器是否为,空就返回false,否则就返回true*/
System.out.println(mal.isEmpty());
/*判断容器是否存在指定元素,有就返回true,否则就返回false*/
System.out.println(mal.contains(1));
System.out.println(mal.contains(13));
/*返回容器中元素的个数*/
System.out.println(mal.size());
/*调用toString方法,返回容器中所有元素*/
System.out.println(mal);
/*清空容器*/
mal.clear();
System.out.println(mal.size());
/*
MyArrayList mal1 = new MyArrayList();
mal1.add(10);
mal1.add(11);
mal1.add(12);
mal1.add(13);
mal1.add(14);
*/
/*比较两个容器中的元素是否相等,相等则返回true,否则返回false*/
/*System.out.println(mal1.equals(mal));
mal1.add(15);
System.out.println(mal1.equals(mal));*/
} |