2.2.3.List接口和实现类
- 特点: 有序、有下标、元素可以重复
- 方法
- void add(int index, Object o) // 在index位置插入对象o
- boolean addAll(int index, Collection c) //将一个集合中的元素添加到此集合中的index位置
- Object get(int index) // 返回集合中指定位置的元素
- List subList(int fromIndex, int toIndex) // 返回fromIndex和toIndex之间的集合元素
public class demo {
public static void main(String[] args) {
// 先创建集合对象
List list = new ArrayList();
// 添加元素
list.add("苹果");
list.add("小米");
list.add(0, "华为");
System.out.println("元素个数:" + list.size());
System.out.println(list.toString());
// 删除元素
list.remove("苹果");
System.out.println("删除之后:" + list.size());
System.out.println(list.toString());
// 遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
for (Object object: list) {
System.out.println(object);
}
// 迭代器
Iterator it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
// 列表迭代器
ListIterator lit = list.listIterator();
System.out.println("列表迭代器,从前往后");
while (lit.hasNext()) {
System.out.println(lit.next());
System.out.println(lit.nextIndex());
}
System.out.println("列表迭代器,从后往前");
while (lit.hasPrevious()) {
System.out.println(lit.previousIndex());
System.out.println(lit.previous());
}
// 判断
System.out.println(list.contains("苹果"));
System.out.println(list.isEmpty());
// 获取位置
System.out.println(list.indexOf("华为"));
}
}
public class demo {
public static void main(String[] args) {
// 创建集合
List list = new ArrayList();
list.add(20);
list.add(30);
list.add(40);
list.add(50);
list.add(60);
System.out.println("元素个数:" + list.size());
System.out.println(list.toString());
// 删除操作
list.remove(0);
list.remove(new Integer(20));
System.out.println("删除元素:" + list.size());
System.out.println(list.toString());
// 补充方法 subList, 含头不含尾
List sublist = list.subList(1, 3);
System.out.println(sublist);
}
}
List实现类
-
ArrayList
- 数组结构实现,查询快,增删慢
- 运行效率快, 线程不安全
package com.test.demo; import java.util.ArrayList; import java.util.Iterator; import java.util.ListIterator; public class demo4 { public static void main(String[] args) { // 创建结合 ArrayList arrayList = new ArrayList(); // 添加元素 Student s1 = new Student("刘德华", 20); Student s2 = new Student("郭富城", 30); Student s3 = new Student("梁朝伟", 40); arrayList.add(s1); arrayList.add(s2); arrayList.add(s3); System.out.println("元素个数:" + arrayList.size()); System.out.println(arrayList.toString()); // 删除元素 // arrayList.remove(s1); // 正常new的是删不掉的,需要重写equals arrayList.remove(new Student("刘德华", 20)); System.out.println("元素个数:" + arrayList.size()); System.out.println(arrayList.toString()); // 遍历 Iterator it = arrayList.iterator(); while (it.hasNext()) { Student s = (Student)it.next(); System.out.println(s.toString()); } ListIterator lit = arrayList.listIterator(); while (lit.hasNext()) { Student s = (Student)lit.next(); System.out.println(s.toString()); } while (lit.hasPrevious()) { Student s = (Student)lit.previous(); System.out.println(s.toString()); } // 判断 System.out.println(arrayList.contains(new Student("梁朝伟", 40))); System.out.println(arrayList.isEmpty()); // 查询 System.out.println(arrayList.indexOf(s1)); } static class Student { private String name; private int age; public Student(String name, int age) { 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 "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } @Override public boolean equals(Object obj) { // 1.判断是不是同一个对象 if (this == obj) { return true; } // 2.判断是否为空 if (obj == null) { return false; } // 3.判断是否是Student类型 if (obj instanceof Student) { Student s = (Student)obj; // 4.比较属性 if (this.name.equals(s.getName()) && this.age == s.getAge()) { return true; } } return false; } } }
- 源码
DEFAULT_CAPACITY = 10; 默认容量 注意:如果没有向集合中添加任何元素时,size为0,容量为0 elementData 存放元素的数组 size 实际元素个数 add() 添加元素 //todo::待补充
- 源码
-
Vector
- 数组结构实现,查询快,增删慢
- 效率快, 线程安全
public class demo { public static void main(String[] args) { // 创建集合 Vector vector = new Vector(); vector.add("草莓"); vector.add("芒果"); vector.add("西瓜"); System.out.println("元素个数:" + vector.size()); // 删除 vector.remove(0); vector.remove("西瓜"); vector.clear(); // 使用枚举器 Enumeration en = vector.elements(); while (en.hasMoreElements()) { String o = (String)en.nextElement(); System.out.println(o); } // 判断 vector.contains("西瓜"); vector.isEmpty(); // vector其它方法 vector.lastElement(); } }
-
LinkedList
- 链表结构实现,增删快,查询慢
public class demo { public static void main(String[] args) { // 创建结合 LinkedList linkedList = new LinkedList(); // 添加 Student s1 = new Student("刘德华", 20); Student s2 = new Student("郭富城", 20); Student s3 = new Student("梁朝伟", 20); linkedList.add(s1); linkedList.add(s2); linkedList.add(s3); System.out.println("元素个数" + linkedList.size()); System.out.println(linkedList); // 删除 linkedList.remove(s1); linkedList.remove(new Student("郭富城", 20)); System.out.println(linkedList.size()); // linkedList.clear(); // 遍历 for (int i = 0; i < linkedList.size(); i++) { System.out.println(linkedList.get(i)); } for (Object object: linkedList) { Student s = (Student)object; System.out.println(s.toString()); } Iterator it = linkedList.iterator(); while (it.hasNext()) { Student s = (Student) it.next(); System.out.println(s.toString()); } ListIterator lit = linkedList.listIterator(); while (lit.hasNext()) { Student s = (Student) lit.next(); System.out.println(s.toString()); } // 判断 System.out.println(linkedList.contains(s1)); System.out.println(linkedList.isEmpty()); // 获取 System.out.println(linkedList.indexOf(s2)); System.out.println(linkedList.indexOf(s3)); } }