1、collection接口之子接口视图
2、collection接口
是list集合和set集合的父接口,但不是map父接口
3、list接口
特点:
有序,元素可以重复
三种遍历方式:
1、for(取下标)
2、foreach
3、迭代器(Iterator)
4、ArrayList集合
数组结构 增删慢,查询快 有连续下标 线程不同步 增长因子为1.5
5、Vector集合
数组结构 增删改查都慢 有连续下标 线程同步 增长因子2
6、LinkedList集合
链表结构 增删快,查询慢 没有连续下标
特有方法:
1、addfirst addlast
2、getfirst getlast
3、removefirst removelast
7、集合的remove方法与迭代器(Iterator)的remove方法区别
集合:删除指定元素
迭代器:删除所有元素
用迭代器遍历arraylist
package com.zhuyuncong.list;
/**
* arraylist中的特有方法 迭代器
*/
import java.util.ArrayList;
import java.util.Iterator;
public class CollectionDemo {
public static void main(String[] args) {
ArrayList al=new ArrayList<>();
al.add("aaa");
al.add("bbb");
al.add("ccc");
al.add("ddd");
al.add("eee");
Iterator iterator = al.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
结果
堆栈(先进后出)
如图:
代码如下
package com.zhuyuncong.list;
import java.util.Iterator;
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
DuiZhan dz= new DuiZhan();
dz.push("a");
dz.push("b");
dz.push("c");
dz.push("d");
dz.push("e");
dz.bianli();
}
}
class DuiZhan{
private LinkedList ll= new LinkedList<>();
//存
public void push(Object obj) {
ll.addFirst(obj);
}
//取
public Object pop() {
return ll.removeFirst();
}
public void bianli() {
Iterator it = ll.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
结果:
队列(先进先出)
如图:
代码如下
package com.zhuyuncong.list;
import java.util.Iterator;
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
DuiZhan dz= new DuiZhan();
dz.push("a");
dz.push("b");
dz.push("c");
dz.push("d");
dz.push("e");
dz.bianli();
}
}
class DuiZhan{
private LinkedList ll= new LinkedList<>();
//存
public void push(Object obj) {
ll.addLast(obj);
}
//取
public Object pop() {
return ll.removeFirst();
}
public void bianli() {
Iterator it = ll.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
结果:
堆栈与队列的代码区别在于增加第一个和最后一个
ArrayList去重复(String对象)
一个容器中有若干元素,如果其中有俩个元素相同,
写一个去重复的方法,传入的属性为旧容器,
然后创建一个新容器,遍历旧容器,判断新容器
是否包含与旧容器一样的元素,包含就不添加,
不包含就添加。
代码如下
package com.zhuyuncong.list;
import java.util.ArrayList;
public class ArrayListRepeatDemo {
public static void main(String[] args) {
ArrayList al= new ArrayList<>();
al.add("aa");
al.add("bb");
al.add("cc");
al.add("dd");
al.add("aa");
ArrayList newAll=repeatList(al);
//旧容器长度
System.out.println(al.size());
//新容器长度
System.out.println(newAll.size());
}
private static ArrayList repeatList(ArrayList al) {
// TODO Auto-generated method stub
ArrayList newAll=new ArrayList<>();
for (Object obj : al) {
if(!newAll.contains(obj)) {
newAll.add(obj);
}
}
return newAll;
}
}
结果:
ArrayList去重复(自定义对象)
package com.zhuyuncong.list;
import java.util.ArrayList;
public class ArrayListRepeatDemo {
public static void main(String[] args) {
ArrayList al= new ArrayList<>();
// al.add("aa");
// al.add("bb");
// al.add("cc");
// al.add("dd");
// al.add("aa");
al.add(new Person("aa","18"));
al.add(new Person("bb","22"));
al.add(new Person("cc","21"));
al.add(new Person("dd","18"));
al.add(new Person("aa","18"));
ArrayList newAll=repeatList(al);
System.out.println(al.size());
System.out.println(newAll.size());
}
private static ArrayList repeatList(ArrayList al) {
// TODO Auto-generated method stub
ArrayList newAll=new ArrayList<>();
for (Object obj : al) {
if(!newAll.contains(obj)) {
newAll.add(obj);
}
}
return newAll;
}
}
class Person{
private String name;
private String age;
public Person() {}
public Person(String name, String age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if(obj instanceof Person) {
Person p=(Person)obj;
System.out.println(this.getName() +"------equals------"+p.getName());
return this.getName().equals(p.getName())
&& this.getAge() == p.getAge();
}
return false;
}
}
contains方法会自动调用equals方法