------- android培训、java培训、期待与您交流! ----------
Collection :
|--List:元素是有序的,元素可以重复。因为该集合体系有索引。
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
|--Set:元素是无序,元素不可以重复。
List:
特有方法。凡是可以操作角标的方法都是该体系特有的方法。
增
add(index,element); 在列表的指定位置插入指定元素
addAll(index,Collection); 将指定 collection 中的所有元素都插入到列表中的指定位置
import java.util.ArrayList; public class ListDemo { public static void main(String[] args) { ArrayList al = new ArrayList(); al.add("01"); al.add("02"); al.add("03"); System.out.println(al); al.add(1,"04"); System.out.println(al); ArrayList al1 = new ArrayList(); al1.add("05"); al1.add("06"); System.out.println(al1); al.addAll(1,al1); System.out.println(al); } }
删
remove(index); 移除列表中指定位置的元素
import java.util.ArrayList; public class ListDemo { public static void main(String[] args) { ArrayList al = new ArrayList(); al.add("01"); al.add("02"); al.add("03"); System.out.println(al); al.remove(1); System.out.println(al); } }
改
set(index,element); 用指定元素替换列表中指定位置的元素
import java.util.ArrayList; public class ListDemo { public static void main(String[] args) { ArrayList al = new ArrayList(); al.add("01"); al.add("02"); al.add("03"); System.out.println(al); al.set(1,"04"); System.out.println(al); } }
查
get(index): 返回列表中指定位置的元素。
subList(from,to); 返回列表中指定的之间的部分,包含头不包含尾
listIterator(); 返回此列表元素的列表迭代器(按适当顺序)。
int indexOf(obj):获取指定元素的位置。
listIterator(int index); 返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。
import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * * 获取集合中元素的方法演示 * */ public class ListDemo { public static void main(String[] args) { ArrayList al = new ArrayList(); al.add("01"); al.add("02"); al.add("03"); System.out.println(al); List sub = al.subList(0,2); System.out.println(sub); System.out.println("01 对应的角标是:"+al.indexOf("01")); for (int i=0;i<al.size();i++)//方法一 { System.out.println(al.get(i)); } for (Iterator it = al.iterator();it.hasNext(); )//方法2 { System.out.println(it.next()); } } }
List集合特有的迭代器。ListIterator是Iterator的子接口。
在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生ConcurrentModificationException异常。所以,在迭代器时,只能用迭代器的方法操作元素,可是 Iterator方法是有限的,只能对元素进行判断,取出,删除的操作,如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。该接口只能通过List集合的listIterator方法获取。
import java.util.ArrayList; import java.util.ListIterator; /** * * ListIterator演示 * */ public class ListDemo { public static void main(String[] args) { ArrayList al = new ArrayList(); al.add("01"); al.add("02"); al.add("03"); System.out.println(al); ListIterator li = al.listIterator(); System.out.println(li.hasNext());//判断后面有没有元素 System.out.println(li.hasPrevious());//判断前面有没有元素 //把集合里面的元素替换成另一种元素 while (li.hasNext()) { Object obj = li.next(); if (obj.equals("02")) li.set("04"); } System.out.println(li.hasNext());//判断后面有没有元素 System.out.println(li.hasPrevious());//判断前面有没有元素 System.out.println(al); } }
import java.util.ArrayList; import java.util.Iterator; /** * 去除ArrayList中的重复元素 * 定义一个临时容器储存 * 如果不相同存入,相同就不存 * 便利完成之后返回 */ public class ArrayListTest { public static void main(String[] args) { ArrayList al = new ArrayList(); al.add("01"); al.add("02"); al.add("01"); al.add("04"); al.add("02"); System.out.println(al+"------"+al.size()); System.out.println(SingleElement(al)); } //定义一个函数,返回一个ArrayList集合,参数ArrayList。功能是去除ArrayList中的重复元素. public static ArrayList SingleElement(ArrayList al) { ArrayList arrayBuffer = new ArrayList(); for (Iterator it = al.iterator();it.hasNext(); ) { Object obj = it.next(); if (!arrayBuffer.contains(obj)) { arrayBuffer.add(obj); } } return arrayBuffer; } }
<span style="font-size:14px;"><strong></strong></span><pre class="java" name="code">import java.util.ArrayList; import java.util.Iterator; /** * 将自定义元素存到ArrayList结构中去,并去掉重复元素 * 比如:存人对象。同姓名同年龄,视为同一个人。为重复元素。 * * 思路: * 对人描述,将数据封装进人对象。 * 定义容器,将人存入。 * 取出。 * List集合判断元素是否相同,依据是元素的equals方法。 */ public class ArrayListTest { public static void main(String[] args) { ArrayList al = new ArrayList(); al.add(new Person("zhangsan",13)); al.add(new Person("lisi",13)); al.add(new Person("zhangsan",13)); al.add(new Person("zhangsan",15)); al.add(new Person("lisi",13)); al.add(new Person("lisi",12)); al = singleElement(al); for (Iterator it = al.iterator();it.hasNext(); ) { Person p = (Person)it.next(); System.out.println(p.getName()+"------"+p.getAge()); } } //定义一个函数,返回ArrayList,参数ArrayList。函数功能去除ArrayList集合中的重复元素 public static ArrayList singleElement(ArrayList al) { ArrayList arrayBuffer = new ArrayList(); for (Iterator it = al.iterator();it.hasNext(); ) { if (!arrayBuffer.contains(it.next())) { arrayBuffer.add(it.next()); } } return arrayBuffer; } } //声明一个Person对象,具有年龄和名字的属性 class Person { private String name; private int age; Person(String name,int age) { this.name = name; this.age = age; } public boolean equals(Object obj) { if(!(obj instanceof Person)) return false; Person p = (Person)obj; return this.name.equals(p.name) && this.age == p.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; } }
LinkedList:特有方法:
addFirst(); 将指定元素插入此列表的开头。
addLast(); 将指定元素添加到此列表的结尾。
getFirst(); 返回此列表的第一个元素。
getLast(); 返回此列表的最后一个元素。
get方法获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
removeFirst(); 移除并返回此列表的第一个元素。
removeLast(); 移除并返回此列表的最后一个元素。
remove方法获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException
import java.util.LinkedList; /** * * LinkedList演示 * */ public class ListDemo { public static void main(String[] args) { LinkedList ll = new LinkedList(); ll.add("02"); ll.addFirst("01"); ll.addLast("03"); System.out.println(ll); System.out.println(ll.getFirst()); System.out.println(ll.getLast()); System.out.println(ll); System.out.println(ll.removeFirst()); System.out.println(ll.removeLast()); System.out.println(ll); //打印移出方式 while (!ll.isEmpty()) { System.out.println(ll.removeLast()); } } }
在JDK1.6出现了替代方法:
offerFirst(); 在此列表的开头插入指定的元素。
offerLast(); 在此列表末尾插入指定的元素。
peekFirst(); 获取但不移除此列表的第一个元素;如果此列表为空,则返回 null。
peekLast(); 获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null。
获取元素,但不删除元素。如果集合中没有元素,会返回null。
pollFirst(); 获取并移除此列表的第一个元素;如果此列表为空,则返回 null。
pollLast(); 获取并移除此列表的最后一个元素;如果此列表为空,则返回 null。
获取元素,但是元素被删除。如果集合中没有元素,会返回null。
堆栈和队列:
堆栈:先进后出 如同一个杯子。队列:先进先出 First in First out FIFO 如同一个水管。
import java.util.LinkedList; /** * * 用LinkedList模拟一个堆栈结构的 * */ public class DuiZhanDemo { public static void main(String[] args) { DuiZhan dz = new DuiZhan(); dz.myAdd("01"); dz.myAdd("02"); dz.myAdd("03"); while (!dz.isNull()) { System.out.println(dz.myGet()); } } } //堆栈结构:先进后出 class DuiZhan { private LinkedList link; DuiZhan() { link = new LinkedList(); } public void myAdd(Object obj) { link.addFirst(obj); } public Object myGet() { return link.removeFirst(); } public boolean isNull() { return link.isEmpty(); } }