数组和单向链表的区别

一.数组

数组:物理地址连续的一块内存空间;特点:地址连续  数据类型固定  长度固定 可以存基本数据类型 和对象类型

1.一维数组的定义

数组不赋值时其元素为0

第一种方法:数据类型 数组名 [ ] = new 数组名  [ 整数];

int array []=new int [10];

第二种方法:数据类型 数组名 [ 不定长] = {    值1,值2,值3.......... 值n                                                     };

第三种方法:数据类型 数组名[ ]=new int [ ]{    值1,值2,值3.......... 值n                  }; 

2.一维数组的遍历

在编写程序时,数组和循环往往结合在一起使用,可以大大地简化代码,提高程序效率。通常,使用for循环遍历数组。

 int  array [] = new int [10];
for(int i=0;i<array.length;i++){  
           int b=  array[i];
  System.Out.Println( b  )   ;   
 }

3.一维数组的操作

功能: 遍历  删除元素? 增加元素? 修改元素

4.二维数组的定义:

Java中定义和操作多维数组的语法与一维数组类似。在实际应用中,三维及以上的数组很少使用,主要使用二维数组。
语法:
数组类型 [][] 数组名;
数组类型 数组 [][];
需要强调的是,虽然从语法上看,Java支持多维数组,但从内存分配原理的角度讲,Java中只有一维数组,没有多维数组。或者说,表面上是多维数组,实质上都是一维数组。


5二维数组及其使用
5.1.初始化二维数组
二维数组也可以进行初始化操作,与一维数组类似,同样采用如下两种方式,要注意大括号的结构及书写顺序。
例:
  • int[][] score=new int[][]{{90,32,43,43,23},{42,32,44},{67}};
  • int score[][]={{90,32,43,43,23},{42,32,44},{67}};
5.2.二维数组的遍历
例:
public static void main(String[] args){
   int [][] array=new int[][]{{90,32,43,43,23},{42,32,44},{67}};
   int total;
   for(int i=0;i<array.length;i++){
       String str=(i+1)+"班";
       total=0;
       for(int j=0;j<array[i].length;j++){
        total+=array[i][j];
       }
       System.out.println(str+"总成绩:"+total);
   }
}

二.ArrayList(数组列表)

1.ArrayList的定义

ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了动态的增加和减少元素,实现了Collection和List接口,可以灵活的设置数组的大小。要注意的是ArrayList并不是线程安全的,因此一般建议在单线程中使用ArrayList。


  List<T>  list = new  ArrayList<T>

2.ArrayList的特点

ArrayList 是一个可变的数组,元素可重复。长度不固定,不是线程安全

3.泛型

泛型:就是指要指前操作的数据类型

List<数据类型> 变量名 = new ArrayList <泛型>;

4.ArrayList的操作

4.1添加

  List<String> list =  new  ArrayList<String>;
                list.add("任亮");
		list.add("吕布");
		list.add("董卓");
              System.out.println(list);
  
          List list2 = new ArrayList();
		list2.add("王允");
		// 改方法继承于collection
		list2.addAll(list);
		System.out.println(list2);

4.2删除

           List list = new ArrayList();
		list.add("任亮");
		list.add("吕布");
		list.add("董卓");
		System.out.println(list);
		// 删除返回的结果
		/*
		 * Object remove = list.remove(1); System.out.println(remove);
		 * System.out.println(list);
		 */

		boolean remove = list.remove("任亮");
		System.out.println(list);
		// 继承于connection
		list.removeAll(list);
		System.out.println(list);
		// 继承于connection
		list.clear();

4.3遍历

		List list = new ArrayList();
		list.add("任亮");
		list.add("吕布");
		list.add("董卓");
 //获取arraylist的迭代器
  ListIterator listIterator=  list.listlterator();
//顺序遍历
   while(
 listIterator.hasNext;
){
          String next = (String) listIterator.next();
			System.out.println(next);
}

//反序遍历

System.out.println("---------------------------");
while (listIterator.hasPrevious())


{


String next1 = (String) listIterator.previous();
System.out.println(next1);


}



         

4、4ArrayList与数组转换


            List list = new ArrayList();
		list.add("任亮");
		list.add("吕布");
		list.add("董卓");
		
		Object[] array = list.toArray();

三.自定ArrayList

1.基本思想:用一个object数组 来扩容来实现链表的增查删改的基本功能

2.自定义链表添加:四步:1.扩容 2.复制旧的数组的内容添加到新的数组 3.将元素添加到新的数组的最后

4.用旧的数组指向新的数组

代码:

       Object [] newArray  = new    Object[oldArray.length++  ];
     Object [] oldArray = new Object[0];
for(int i=0;i<oldArray.length;i++){
    newArray[i]= oldArray[i];


}
     newArray[
   oldArray.length
]=data;

oldArray=newArray;

                                


3.删除:

// 删除指定位置的元素

	public void remove(int index) {

		// 从指定位置

		for (int i = index; i < size - 1; i++) {
			// 在索引处把删除之后的值往前移动
			oldArray[i] = oldArray[i + 1];

		}

		// 去掉一个元素 数组长度减一

		size--;
	}

4.插入:
// 在指定位置插入一个数据

	public void insert(int index, Object o) {

		// 扩容
		if (oldArray.length == size) {

			Object[] newArray = new Object[size + 5];
			// 复制内容

			for (int i = 0; i < oldArray.length; i++) {
				newArray[i] = oldArray[i];

			}
			// 设置新的数组为保存对象

			oldArray = newArray;

		}
		// 在索引把新插入的值的位置排列好
		for (int j = size; j > index; j--) {
			// 在插入元素的位置之后移动一位
			oldArray[j] = oldArray[j - 1];

		}

		// 赋值
		oldArray[index] = o;
		size++;

	}

5.修改

// 修改指定位置的元素
	public void alter(int index, Object o) {

		oldArray[index] = o;

	}
6.获取指定位置的值
public E get(int index) {

		if (index >= 0 && index < size) {

			return (E) oldArray[index];

		} else {
			throw new RuntimeException("java.lang.IndexOutOfBoundsException");

		}
	}

7.获取链表的长度




// 获取单向链表的长度
	public int size() {
		
		return size;
	}








 


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值