java中集合的特點
集合的關係圖
/** * 集合的特點 * 1.用於存儲對象的容器 * 2.集合的長度 是可變 的 * 3.集合中不可以存儲 基本數據類型值 * * 集合容器因爲內部的數據結構不同,有多種具體容器,不斷向上抽取,就形成了集合框架 * 框架的頂層Collection接口 * * Collection的常見方法 * * 1.添加 * boolean add(E e) 確保此 collection 包含指定的元素(可選操作)。 * boolean addAll(Collection c) * 2.刪除 * boolean remove() * boolean removeAll() * 3.判斷 * boolean contains() * boolean containsAll() * boolean isEmpty():判斷集合中是否有元素 * 4.獲取 * int size():返回此Collection中的元素數 * Iterator iterator:取出元素的方式 :迭代器 * 該對象必須依賴於具體的容器,因爲每一個容器的數據結構都 不同 * 所以該迭代器對象 是在容器中進行內部實現的 * 對於使用容器者而言,具體的實現不重要,只要通過窗口獲取到該實現的迭代器對象即可 * 也就是iterator()方法 * 5.其它 * boolean retainAll():取交集 將兩個集合中的相同元素從調用removeAll的集合中移除 * Object[] toArray():將集合轉成數組 * * * ----------------------------------- * Collection * 兩個最重要的子類 * 1.List:有序(存入和取出的順序一致),元素都 有索引,元素可以重複 * 2.Set:元素不能重複,無序。 * * List:特有的常見方法,有一個共性特點就是都可以操作角標 * 1.添加 * boolean add(int index, E element)在列表的指定位置插入指定元素(可選操作)。 * 2.刪除 * boolean remove(Object o)從此列表中移除第一次出現的指定元素(如果存在)(可選操作)。 * 3.修改 * Object set(index,element) * 4.獲取 * Object get(index) * int indexOf(object) * int lastIndexOf(object) * List subList(int fromIndex, int toIndex)返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之間的部分視圖。 * * List集合是可以完成對元素的增刪改查的 * * List: * ---Vector:內部是數組數據結構,是同步的(線程安全)。增刪,查詢都很慢。 * ---ArrayList:內部是數組結構,是不同步的。替代Vector.查詢的速度快。 * ---LinkedList:內部是鏈表數據結構,是不同步的。增刪元素的速度很快。 * * LinkedList: * addFirst(); * addLast(); * * getFirst();//獲取但不移除,如果鏈表爲空,拋出異常NoSuchElementException * getLast(); * jdk1.6以後 * pollFirst();//獲取但不移除,如果鏈表爲空 ,返回null; * pollLast();// * */
//Collection的demo
public class CollectionDemo { public static void main(String[]args){ Collection collection = new ArrayList(); show(collection); } private static void show(Collection collection) { collection.add("aaa"); collection.add("bbb"); collection.add("ccc"); collection.add("ddd"); System.out.println(collection); } }
//IteratorDemo
public class IteratorDemo { public static void main(String[]args){ Collection collection = new ArrayList(); collection.add("aaa"); collection.add("bbb"); collection.add("ccc"); collection.add("ddd"); //使用了Collection中的iterator()方法。調用 集合中的迭代器,是爲了獲取集合中的迭代器對象 //用法一 Iterator iterator = collection.iterator(); // while (iterator.hasNext()){ // System.out.println(iterator.next()); // } //用法二 for (Iterator iterator1 = collection.iterator();iterator1.hasNext();){ System.out.println(iterator1.next()); } } }
//ListDemo
public class ListDemo{ public static void main(String[]args){ List list = new ArrayList(); list.add("aaa"); list.add("bbb"); list.add("ccc"); list.add("ddd"); list.add("eee"); System.out.println(list); //插入元素 // list.add(1,"fff"); // System.out.println(list); //刪除元素 // System.out.println(list.remove(1)); //修改元素 // System.out.println(list.set(3,"iii")); //獲取元素 // System.out.println(list.get(4)); //獲取子元素 System.out.println(list.subList(2,4)); System.out.println(list); }
//ListDemo2
public class ListDemo2 { public static void main(String[]args){ List list = new ArrayList(); list.add("aaa"); list.add("bbb"); list.add("ccc"); list.add("ddd"); list.add("eee"); System.out.println(list); ListIterator listIterator = list.listIterator(); //它可以實現在迭代過程 中完成 對元素的增刪改查 //注意,只有list列表具備些功能 while (listIterator.hasNext()){ Object ob = listIterator.next(); if (ob.equals("bbb")){ listIterator.add("ggg"); } } System.out.println(list); while (listIterator.hasPrevious()){ System.out.println(listIterator.previous()); } System.out.println(list); /* Iterator iterator=list.iterator(); while (iterator.hasNext()){ //如果這樣寫,會報錯,在迭代過程中,不要使用集合操作元素,容易拋出異常 //java.util.ConcurrentModificationException //當方法檢測到對象的併發修改,但不允許這種修改時,拋出此異常 //可以使用Iterator接口的子接口ListIterator來完成在迭代中對元素進行更多的操作 Object ob = iterator.next(); if (ob.equals("bbb")){ list.add("ggg"); } } System.out.println(list); */ } }//VectorDemo
public class VectorDemo { public static void main(String[]args){ Vector vector = new Vector(); vector.addElement("aaa"); vector.addElement("bbb"); vector.addElement("ccc"); Enumeration enumeration = vector.elements(); while (enumeration.hasMoreElements()){ System.out.println(enumeration.nextElement()); } } }
//LinkListDemo
/** * 請使用LinkedList來模擬一個堆棧或者隊列數據結構 * <p> * 堆棧: * 棧的特點:先進後出 * <p> * 隊列:先進先出 */ class DuiLie { private LinkedList list; public DuiLie() { list = new LinkedList(); } public void add(Object o) { list.addLast(o); } public Object getList() { return list.removeFirst(); } public boolean isEmpty() { return list.isEmpty(); } } public class LinkedListTest { public static void main(String[] args) { DuiLie duiLie = new DuiLie(); duiLie.add("aaa"); duiLie.add("bbb"); duiLie.add("ccc"); duiLie.add("ddd"); while (!duiLie.isEmpty()) { System.out.println(duiLie.getList()); } } }
//利用arrayList去除集合中的重複元素
public class Person { private String name; private int age; public Person(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 int hashCode() {//判斷hash值是否相同 // System.out.println(this+"......hashcode..."); return name.hashCode() + age; } @Override public boolean equals(Object obj) {//判斷內容是否相同 if (this == obj) { return true; } if (!(obj instanceof Person)) { throw new ClassCastException("類型轉換錯誤"); } // System.out.println(this + "......equals...." + obj); Person person = (Person) obj; return this.name.equals(person.name) && this.age == person.age; } @Override public String toString() { return name+":"+age; } }
public class ArrayListTest { public static void main(String[] args){ test(); test2(); } //存自定義對象 //注意://arrayList判斷元素是否相同 remove(),contains(),的依據是equals()方法, //HashSet的依據是hashCode()和equals()方法,該元素是否有和該容器中的元素相同 //所以對於自定義對象,一定要重寫equals()方法, private static void test2() { ArrayList arrayList = new ArrayList(); arrayList.add(new Person("aaa", 10)); arrayList.add(new Person("bbb", 20)); arrayList.add(new Person("ccc", 30)); arrayList.add(new Person("bbb", 20)); arrayList.add(new Person("ccc", 30)); System.out.println(arrayList); arrayList = singletest(arrayList); System.out.println(arrayList); } //存字符串 private static void test() { ArrayList arrayList = new ArrayList(); arrayList.add("aaa"); arrayList.add("bbb"); arrayList.add("ccc"); arrayList.add("ccc"); arrayList.add("ddd"); arrayList.add("ddd"); arrayList.add("ddd"); System.out.println(arrayList); arrayList = singletest(arrayList); System.out.println(arrayList); } public static ArrayList singletest(ArrayList list){ //1,定義一個集合的迭代器 Iterator iterator = list.iterator(); //2,創建一個新的list集合 ArrayList arrayList1 = new ArrayList(); //3,迭代list集合 while (iterator.hasNext()){ //4.定義 一個對象接收集合中的元素 Object object = iterator.next(); //5.判斷新集合中是否有相同的元素,如果沒有,則存進新的集合 if (!arrayList1.contains(object)){ arrayList1.add(object); } } return arrayList1; } }