一、使用大O表示法
线性查找(从头到尾一个一个查找)
O(N)
效率还可以
二分查找(折半查找)得排序
O(log N)
效率良好
无序数组的插入
O(1)(使用常数表示的一般都不错)
效率优秀
有序数组的插入
O(N)
效率还可以
无序数组的删除
O(N)
效率还可以
有序数组的删除
O(N)
效率还可以
O(1)>O(log N)>O(N)>O(N^2)
二、使用数组存储对象
写一个Person类如下:
public class Person {
private String lastname;
private String firstname;
private int age;
public Person(String lastname,String firstname,int age){
this.lastname=lastname;
this.firstname=firstname;
this.age=age;
}
public void display()
{
System.out.print("lastname:"+lastname);
System.out.print("firstname:"+firstname);
System.out.println("age:"+age);
}
public String getLastname() {
return lastname;
}
public String getFirstname() {
return firstname;
}
public int getAge() {
return age;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public void setAge(int age) {
this.age = age;
}
}
写一个ClassDataArray类,包含使用数组存储对象的查找删除显示的方法
public class ClassDataArray {
private Person[] aPersons;
int element;
public ClassDataArray(int max) {
// TODO Auto-generated constructor stub
aPersons=new Person[max];
element=0;
}
public Person find(String serachname){//按照姓查询
int j;
for(j=0;j<element;j++)
if(aPersons[j].getLastname().equals(serachname))
break;
if(j==element)
return null;//没有找到
else
return aPersons[j];//找到该数据
}
public void insert(String lastname,String firstname,int age){
aPersons[element]=new Person(lastname, firstname, age);
element++;
}
public boolean delete(String searchkey){
int j;
for(j=0;j<element;j++)
if(aPersons[j].getLastname().equals(searchkey))
break;
if(j==element)
return false;//删除失败,没有找到该数据
else{
for(int k=j;k<element;k++)
aPersons[k]=aPersons[k+1];
element--;
return true;
}
}
public void display(){
for(int j=0;j<element;j++)
aPersons[j].display();
}