public class Person {
private String name;
int age;
public Person() {
// TODO Auto-generated constructor stub
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
/**
* list的实现类
* ArrayList
* 底层实现: 是由可变数组实现的,通过数组的拷贝实现
* 优点: 查询效率高
* 缺点: 添加,删除效率低,需要大量的使用数组的拷贝,效率较低
* 使用: 大量做查询的时候使用
* 扩容机制: int newCapacity = oldCapacity + (oldCapacity >> 1); 新容量每次扩容原来的1.5倍,使用copyOf方法进行动态扩容
*
* 存储自定义的引用数据类型的数据,使用任何比较数据是否相等的方法,需要手动重写equals方法
*
* Vector 向量
* 区别:
* 1.ArrayList线程不安全的 Vector同步的线程安全的
* 2.ArrayList扩容原容量的1.5倍 Vector扩容原容量的2倍
*
*
* LinkedList
* 底层: 使用双向链表结构实现
* 优点: 做增删效率高
* 缺点: 查询效率低
* 使用: 大量做增删的时候使用
* 新增: 新增了一些操作于链表头尾的方法
*
* 问: ArrayList和LinkedList,Vector之间的区别
*/
public class ArrayListDemo03 {
public static void main(String[] args) {
ArrayList<Person> list=new ArrayList();
list.add(new Person("张三",18));
list.add(new Person("李四",19));
//默认比较对象的地址,因为多个new多个对象,重写equals方法
System.out.println(list.indexOf(new Person("张三",18))); //0
}
}