List
简介
List是一个动态数组,用户可以对插入元素的位置进行精确的控制,可以根据整数索引(index)获取序列中的元素,允许插入重复的值,包null值
常用的两个实现类:ArrayList、LinkedList
ArrayList
构造方法
public ArrayList()
:创建一个ArrayList对象
常用方法
boolean add(E e);
:添加元素void add(int index, E element);
:向指定位置添加元素E get(int index);
:获取指定位置的元素E set(int index, E element);
:修改指定位置的元素int indexOf(Object o);
:查找指定元素的位置boolean contains(Object o);
:是否包含指定的元素boolean remove(Object o);
:移除指定的元素E remove(int index);
:移除指定位置的元素
foreach循环
List<String> list = new ArrayList<String>();
// 添加元素
list.add("张三");
list.add("李四");
list.add("王五");
// 使用foreach遍历
for (String str : list) {
System.out.println(str);
}
List中存放自定义类型
class Person {
private String name;
private int age;
//省略构造方法、set、get、toString
@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<Person> list = new ArrayList<Person>();
Person p1 = new Person("张三", 20);
Person p2 = new Person("张三", 20);
list.add(p1);
System.out.println(list.contains(p2));//true
System.out.println(list.indexOf(p2));//0
indexOf方法是使用equals比较两个对象是否相等
引用传递
List<String> list1 = new ArrayList<String>();
list1.add("张三");
list1.add("李四");
list1.add("王五");
List<String> list2 = new ArrayList<String>();
list2.addAll(list1);
//将List1中的张三删除
list1.remove("张三");
System.out.println(list1);
System.out.println(list2);
addAll方法将list1中的元素全部添加到list2
LinkedList
LinkedList是一个链表,实现了List接口
构造方法
public LinkedList()
:创建一个LinkedList对象
常用方法
void addFirst(E e)
:在开始位置添加元素void addLast(E e)
:在最后位置添加元素E removeLast()
:删除最后的元素E removeFirst()
:删除开始位置的元素
ArrayList和LinkedList的区别
- 对应随机访问,ArrayList效率要高,因为ArrayList保存有下标
- 对应添加和删除,LinkedList效率高,因为ArrayList需要移动元素