一.数组
数组:物理地址连续的一块内存空间;特点:地址连续 数据类型固定 长度固定 可以存基本数据类型 和对象类型
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中只有一维数组,没有多维数组。或者说,表面上是多维数组,实质上都是一维数组。
- int[][] score=new int[][]{{90,32,43,43,23},{42,32,44},{67}};
- int score[][]={{90,32,43,43,23},{42,32,44},{67}};
二.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;
}