List
List是一个接口
ArrayList 和 LinkedList 区别:
ArrayList:数组实现
数组实现的特点: 查询快 增删慢(参照于LinkList)
查询: 直接使用角标查询
增删: 需要把要添加的元素的位置 后面的元素 全部移动一位
LinkedList:链表实现
链表实现的特点: 查询慢 增删快
查询: 判断查询的元素离头金还是离尾近
然后从头/尾 一个一个查找 找到为止
增删: 将要插入的元素的地址保存 后面的元素 不进行任何的改动
什么时候用ArrayList?
查询多 就用ArrayList
什么时候用LinkedList?
增删多 就使用LinkedList
List接口中 常用方法
public static void fun1() {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add(4,"e");
System.out.println(list);
Object object = list.get(3);
System.out.println(object);
for(int i = 0; i < list.size(); i++){
System.out.println(list.get(i));
}
list.set(4, "z");
System.out.println(list);
Object remove = list.remove(4);
System.out.println(remove);
System.out.println(list);
}
删除时 要注意的
public static void fun2() {
List list = new ArrayList();
list.add(111);
list.add(222);
list.add(333);
..所以调用 是按角标删除的方法 所以越界
list.remove(Integrt.valueOff(111));
System.out.println(list);
}
发生并发修改异常
public static void fun3() {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
Iterator iterator = list.iterator();
while(iterator.hasNext()){
if(iterator.next().equals("b")){
list.add("oh~yes");
}
}
System.out.println(list);
}
解决兵法修改异常
public static void fun4() {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
ListIterator listIterator = list.listIterator();
while(listIterator.hasNext()){
if(listIterator.next().equals("b")){
listIteratoe.add("oh~yes");
}
}
System.out.println(list);
}
vector
public static void fun5() {
Vector vector = new Vector();
vector.addElement("a");
vector.addElement("b");
vector.addElement("c");
vector.addElement("d");
System.out.println(vector);
Enumeration elements = vector.elements();
while (elements.hasMoreElements()) {
System.out.println(elements.nextElement());
}
}
逆向遍历集合
public static void fun6() {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
ListIterator listIterator = list.listIterator();
while(listIterator.hasnext()){
System.out.println(listiterator.next());
}
while(lisIterator.hasPrevious()){
System.out.println(listIterator.previous());
}
}
ArrayList去除重复元素
public static void fun7() {
ArrayList arrayList = new ArrayList();
arrayList.add("a");
arrayList.add("a");
arrayList.add("a");
arrayList.add("b");
arrayList.add("b");
arrayList.add("b");
arrayList.add("c");
arrayList.add("c");
arrayList.add("c");
ArrayList arrayList2 = new ArrayList();
Iterator iterator = arrayList.iterator();
while(iterator.hasNext();){
Object next = iterator.next();
if(!arrayList2.contains(next)){
arrayList2.add(next);
}
}
System.out.println(arrayList2);
}
重新创一个Student类
有姓名 年龄
要写构造方法 set/get方法 重写toString方法
ArrayList List = new ArrayList();
List.add(new Student("小小",18));
List.add(new Student("小小",18));
List.add(new Student("大大",17));
List.add(new Student("大大",17));
List.add(new Student("中中",16));
List.add(new Student("中中",16));
ArrayList list2 = new ArrayList();
Iterator iterator = List.iterator;
while(iterator.hasNext()){
Object next = iterator.next();
Student student = (Student)next;
if(List2.contains(student)){
list2.add(student);
}
}
for(Object object : list2){
Student student = (Student)object;
System.out.println(student);
}
}
重写的equals方法:
@Override
public boolean equals(Object obj) {
Student student = (Student)obj;
return this.name.equals(student.getName() &&
this.age == student.getAge());
}
LinkedList
LinkedList linkedList = new LinkedList()
//使用addfirst方法 添加
linkedList.addLast("a")
linkedList.addLast("b")
linkedList.addLast("c")
linkedList.addLast("d")
System.out.println(linkedList)
//获取头尾元素
System.out.println(linkedList.getFirst())
System.out.println(linkedList.getLast())
LinkedList模拟栈结构
LinkedList list = new LinkedList();
list.addLast("a");
list.addLast("b");
list.addLast("c");
list.addLast("d");
while(!list.isEmpty){
Object str = list.removeLast();
System.out.println(str);
System.out.println(list);
}
队列结构 和 栈结构
栈结构的特点: 先入的 后厨
队列结构的特点: 先进先出
Day.15