### Collection 接口,一个Collection存储一组无序、不唯一的对象,一般不会直接使用该接口。 Collection 常用方法 - int size() 获取集合的长度 - boolean isEmpty() 判断集合是否为空 - boolean contains(Object o) 判断集合中是否存在某个对象 - Iterator<E> itertor() 实例化Iterator接口,遍历集合 - Object[] toArray() 将集合转换为一个Object类型的数组 - boolean add(Object o) 向集合中添加元素 - boolean remove(Object o) 从集合中删除元素 - boolean containsAll(Collection c) 判断集合中是否存在某个集合的所有元素 - boolean addAll(Collection c) 向集合中添加某个集合的所有元素 - boolean removeAll(Collection c) 从集合中移除某个集合的所有元素 - void clear() 清空集合,删除集合中的所有元素 - boolean equals(Object o) 比较两个集合是否相等 - int hashCode() 返回集合的hash值 ### Collection 的子接口 - List:存放有序、不唯一的元素。 - Set:存放无序、唯一的元素。 - Queue:队列集合。 #### List接口 List是Collection主要的子接口,一个List可以存储一组有序、不唯一的对象。 List接口在继承Collection接口的基础之上,进行啦了方法扩展。 - Object get(int index) 通过下标获取集合中指定位置的元素。 - Object set(int index,Object o) 向集合中指定位置添加元素,如果该位置已存在某个元素,则直接替换 - int indexOf(Object o) 查找某个对象在集合中的具体位置 - ListIterator<E> listIterator() 实例化ListIterator对象 - List<E> subList(int fromIndex,int toIndex) 根据两个指定的下标获取集合的子元素 #### List接口的实现类 - ArrayList ArrayList 的特点是查询元素效率很高,只需要通过寻址地址和下标即可快速定位到目标元素,缺点是添加或删除元素,效率很低,因为要移动兄弟元素的位置。 ```java import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Test { public static void main(String[] args) { ArrayList arrayList = new ArrayList(); arrayList.add("Hello"); arrayList.add("World"); arrayList.add("JavaSE"); arrayList.add("JavaME"); arrayList.add("JavaEE"); System.out.println("list:"+arrayList); System.out.println("list的长度是:"+arrayList.size()); System.out.println("list是否包含Java:"+arrayList.contains("Java")); for(int i=0;i<arrayList.size();i++) { System.out.println(arrayList.get(i)); } Iterator iterator = arrayList.iterator(); while(iterator.hasNext()) { String item = (String)iterator.next(); System.out.println(item); } arrayList.remove("World"); System.out.println(arrayList); arrayList.remove(3); System.out.println(arrayList); arrayList.add(1, "SQL"); System.out.println(arrayList); int index = arrayList.indexOf("JavaSE"); System.out.println(index); List list = arrayList.subList(1, 3); System.out.println(list); } } ``` Vector 是一个早期的List实现类,用法基本与ArrayList一致。Stack 是 Vector 的一个子类,实现了"后进先出"的栈。 ```java import java.util.Vector; public class Test2 { public static void main(String[] args) { Vector vector = new Vector(); vector.addElement("Hello"); vector.add("World"); for(int i=0;i<vector.size();i++) { System.out.println(vector.get(i)); } } } ``` ```java import java.util.Stack; public class Test3 { public static void main(String[] args) { Stack stack = new Stack(); stack.push("Hello"); stack.push("JavaSE"); stack.push("JavaME"); stack.push("JavaEE"); System.out.println(stack); for(int i=0;i<stack.size();i++) { System.out.println(stack.get(i)); } System.out.println("栈顶元素:"+stack.peek()); System.out.println(stack); System.out.println("栈顶元素:"+stack.pop()); System.out.println(stack); } } ``` LinkedList 实现了一个"先进先出"的队列,采用链表的形式存储分散的内存空间, ```java import java.util.LinkedList; public class Test4 { public static void main(String[] args) { LinkedList list = new LinkedList(); list.add("Hello"); list.add("World"); list.add("Java"); System.out.println(list); list.offer("JavaSE"); System.out.println(list); list.addLast("JavaSE2"); System.out.println(list); list.push("JavaME"); System.out.println(list); list.addFirst("JavaME2"); System.out.println(list); System.out.println("第一个元素是:"+list.peek()); System.out.println(list); System.out.println("最后一个元素是:"+list.peekLast()); System.out.println(list); System.out.println(list.pop()); System.out.println(list); } } ``` PriorityQueue 在使用的时候需要注意,添加到该队列中的数据必须有序,即对象具备排序的功能。 ```java import java.util.PriorityQueue; public class Test5 { public static void main(String[] args) { PriorityQueue queue = new PriorityQueue(); queue.add(new A(2)); queue.add(new A(1)); System.out.println(queue); } } class A implements Comparable{ private int num; public A(int num) { this.num = num; } /** * A.compareTo(B) * 1表示A大于B * 0表示A等于B * -1表示A小于B */ @Override public int compareTo(Object o) { // TODO Auto-generated method stub A a = (A)o; if(this.num > a.num) { return 1; }else if(this.num == a.num) { return 0; }else { return -1; } } @Override public String toString() { return "A [num=" + num + "]"; } } ```
Test.java
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Test { public static void main(String[] args) { ArrayList arrayList = new ArrayList(); arrayList.add("Hello"); arrayList.add("World"); arrayList.add("JavaSE"); arrayList.add("JavaME"); arrayList.add("JavaEE"); arrayList.add(null); System.out.println("list:"+arrayList); System.out.println("list的长度是:"+arrayList.size()); System.out.println("list是否包含Java:"+arrayList.contains("Java")); for(int i=0;i<arrayList.size();i++) { System.out.println(arrayList.get(i)); } Iterator iterator = arrayList.iterator(); while(iterator.hasNext()) { String item = (String)iterator.next(); System.out.println(item); } arrayList.remove("World"); System.out.println(arrayList); arrayList.remove(3); System.out.println(arrayList); arrayList.add(1, "SQL"); System.out.println(arrayList); int index = arrayList.indexOf("JavaSE"); System.out.println(index); List list = arrayList.subList(1, 3); System.out.println(list); } }
Test2.java
import java.util.Vector; public class Test2 { public static void main(String[] args) { Vector vector = new Vector(); vector.addElement("Hello"); vector.add("World"); for(int i=0;i<vector.size();i++) { System.out.println(vector.get(i)); } } }
Test3.java
import java.util.Stack; public class Test3 { public static void main(String[] args) { Stack stack = new Stack(); stack.push("Hello"); stack.push("JavaSE"); stack.push("JavaME"); stack.push("JavaEE"); System.out.println(stack); for(int i=0;i<stack.size();i++) { System.out.println(stack.get(i)); } System.out.println("栈顶元素:"+stack.peek()); System.out.println(stack); System.out.println("栈顶元素:"+stack.pop()); System.out.println(stack); } }
Test4.java
import java.util.LinkedList; public class Test4 { public static void main(String[] args) { LinkedList list = new LinkedList(); list.add("Hello"); list.add("World"); list.add("Java"); System.out.println(list); list.offer("JavaSE"); System.out.println(list); list.addLast("JavaSE2"); System.out.println(list); list.push("JavaME"); System.out.println(list); list.addFirst("JavaME2"); System.out.println(list); System.out.println("第一个元素是:"+list.peek()); System.out.println(list); System.out.println("最后一个元素是:"+list.peekLast()); System.out.println(list); System.out.println(list.pop()); System.out.println(list); } }
Test5.java
import java.util.PriorityQueue; public class Test5 { public static void main(String[] args) { PriorityQueue queue = new PriorityQueue(); queue.add(new A(2)); queue.add(new A(1)); System.out.println(queue); } } class A implements Comparable{ private int num; public A(int num) { this.num = num; } /** * A.compareTo(B) * 1表示A大于B * 0表示A等于B * -1表示A小于B */ @Override public int compareTo(Object o) { // TODO Auto-generated method stub A a = (A)o; if(this.num > a.num) { return 1; }else if(this.num == a.num) { return 0; }else { return -1; } } @Override public String toString() { return "A [num=" + num + "]"; } }