package DataStructure;
import java.util.ArrayList;
import java.util.Scanner;
public class MyArrayList {
public static void main(String args[]){
List list=new List();
list.main();
}
}
class List{
private static final int DEFAULT_CAPACITY=5;
private int length;
private int[] item;
public List(){
int i=0;
item=new int[DEFAULT_CAPACITY];
ArrayList<Integer> list=new ArrayList<>();
while(i<DEFAULT_CAPACITY){
int i1 = (int)(Math.random()*10+1);
if(!list.contains(i1)){
list.add(i1);
i++;
}
}
for(int j=0;j<DEFAULT_CAPACITY;j++){
item[j]=list.get(j);
}
length=DEFAULT_CAPACITY;
}
public void main(){
System.out.println("请选择操作:");
System.out.println("1.查看当前数据");
System.out.println("2.增加一个数据");
System.out.println("3.删除一个数据");
System.out.println("4.查找一个数据");
System.out.println("5.修改一个数据");
System.out.println("6.清空当前数据");
Scanner scanner=new Scanner(System.in);
switch (scanner.nextInt()) {
case 1:
clearScreen();
println("当前数据为:");
printList();
backMain();
break;
case 2:
System.out.println("请输入要插入的下标和值:");
Scanner scanner1=new Scanner(System.in);
String s=scanner1.nextLine();
String[] sa=s.split(" ");
insertVal(Integer.parseInt(sa[0]),Integer.parseInt(sa[1]));
System.out.println("插入后结果:");
printList();
backMain();
break;
case 3:
clearScreen();
System.out.println("请选择删除方式:");
System.out.println("1.输入指定值并删除");
System.out.println("2.输入指定下标并删除对应值");
switch (scanner.nextInt()){
case 1:
clearScreen();
System.out.println("请输入要删除的值:");
printList();
if(!removeValueByValue(scanner.nextInt())){
System.out.println("对不起,数据表中无此值,请重新输入!");
backMain();
}else{
System.out.println("删除成功!当前剩余项为:");
printList();
backMain();
}
break;
case 2:
clearScreen();
System.out.println("请输入要删除的下标:");
printList();
if(removeValueByIndex(scanner.nextInt())){
System.out.println("删除成功!当前剩余项为:");
printList();
backMain();
}else{
System.out.println("请输入正确的下标!");
}
break;
}
break;
case 4:
clearScreen();
System.out.println("请选择要查找的方式");
System.out.println("1.按值查找索引");
System.out.println("2.按索引查找值");
switch (scanner.nextInt()){
case 1:
clearScreen();
println("请输入要查找的值");
printList();
int va=scanner.nextInt();
if(findValueByValue(va)==length){
println("对不起,包含该值");
backMain();
}else{
println("该值对应的索引为:"+findValueByValue(va));
backMain();
}
break;
case 2:
clearScreen();
println("请输入要查询的的下标对应的值:");
printList();
int index=scanner.nextInt();
if(findValueByIndex(index)==length){
println("对不起,请输入正确的下标");
backMain();
}else{
println("查到的值为:"+findValueByIndex(index));
backMain();
}
break;
}
break;
case 5:
clearScreen();
println("请输入修改的下标和其对应的值");
printList();
Scanner scanner2=new Scanner(System.in);
String s1 = scanner2.nextLine();
String[] strings=s1.split(" ");
if(setValue(Integer.parseInt(strings[0]),Integer.parseInt(strings[1]))!=length) {
println("修改成功!");
printList();
backMain();
}else{
println("修改失败,请检查索引是否正确");
backMain();
}
break;
case 6:
destoryList();
if(length==0){
println("销毁成功!");
}else{
println("销毁失败!");
}
backMain();
break;
}
}
public void println(String s){
System.out.println(s);
}
public void backMain(){
System.out.println("按任意键返回主界面...");
Scanner scanner=new Scanner(System.in);
if(scanner.nextLine()!=null){
clearScreen();
main();
}
}
public void clearScreen(){
System.out.print("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
}
public void destoryList(){
length=0;
}
public void printList(){
for(int i=0;i<length;i++){
System.out.print(item[i]+" ");
}
System.out.println();
}
public int size(){
return length;
}
public boolean isEmpty(){
return length==0;
}
//在指定下标前插入值
public void insertVal(int index,int value){
//因为要新增一个值所以新数组的长度较之前加1
int[] newItem=new int[length+1];
//从后往前,向新数组赋值,直到要插入的下标之后
for(int i=length;i>index;i--){
newItem[i]=item[i-1];
}
newItem[index]=value;//此时再将要插入的值赋给相应的下标
//从前往后把剩余老数组中的值赋给新数组
for(int i=0;i<index;i++){
newItem[i]=item[i];
}
item=newItem;//将新数组的引用赋给老数组
length++;//长度++
}
public boolean removeValueByValue(int value){
int index=0;//定义一索引
for(int i=0;i<length;i++){
if(item[i]==value){//当索引的值和要删除的值相等时
index=i;//将下标赋值给索引
break;
}else if(i==(length-1)&&item[i]!=value){//当查找当最后一项且值不同的时候
return false;//该数组中没有该值
}
}
for(int j=index;j<length;j++){//从该索引开始到倒数第二个数
if(j==(length-1)){//如果循环到最后一个值
length--;//直接将数组长度--
return true;
}
item[j]=item[j+1];//将下一个值赋给当前元素
}
length--;//长度--
return true;
}
public boolean removeValueByIndex(int index){
if(index<0||index>=length){//下标不合法
return false;
}else if(index==(length-1)) {//如果是最后一个下标
length--;
}else {
for (int i = index; i < length-1; i++) {
item[i] = item[i+1];
}
length--;
}
return true;
}
//是否包含某个值
public boolean ContainsValue(int value){
for(int i:item){
if(i==value){
return true;
}
}
return false;
}
//按值查找下标
public int findValueByValue(int value){
for(int i=0;i<length;i++){
if(item[i]==value){
return i;
}
}
return length;//返回长度,即表示未查询到该值
}
//指定下标查找值
public int findValueByIndex(int index){
if(index<0||index>=length){
return length;//下标不合法
}else{
for(int i=0;i<length;i++){
if(i==index){
return item[i];
}
}
}
return length;
}
public int setValue(int index,int value){
if(index<0||index>=length){
return length;
}else{
for(int i=0;i<length;i++){
if(i==index){
item[i]=value;
return 0;
}
}
}
return length;
}
}
java实现单链表的增删查改
最新推荐文章于 2023-05-02 18:23:46 发布