天天看點

java集合架構Collection(一)

java集合架構

java.util.Collection接口

Collection接口中定義了所有集合都要具備的功能,它也是所有集合的頂級接口。

Collection下面有幾種不同集合的分類,常見的兩個:

1.java.util.List:List接口表示的是線性表,是有序的且可以存放重複元素的集合 *

2.java.util.Set:Set接口表示的是不可重複的集合

這裡指的重複是元素是否可以重複,而判斷重複的标準是根據元素自身equals比較。

public static void main(String[] args) {
  Collection c = new ArrayList();
  /*
   * boolean add(E e)
   * 向目前集合中添加給定元素,成功添加後傳回true
   */
  c.add("one");
  c.add("two");
  c.add("three");
  c.add("four");
  c.add("five");
  System.out.println(c);
  /*
   * int size()
   * 傳回目前集合的元素個數
   */
  int size = c.size();
  System.out.println("size:"+size);
 
  /*
   * boolean isEmpty()
   * 判斷目前集合是否為空集
   */
  boolean isEmpty = c.isEmpty();
  System.out.println("isEmpty:"+isEmpty);
 
  /*
   * void clear()
   * 清空集合
   */
  c.clear();
  System.out.println(c);
  System.out.println("size:"+c.size());
  System.out.println("isEmpty:"+c.isEmpty());
    }      

boolean contains(E e)

判斷目前集合是否包含給定元素,是否包含的依據是是否

與集合現有元素存在equals比較 為true的情況。

public static void main(String[] args) {
  Collection c = new ArrayList();
  c.add(new Point(1,2));
  c.add(new Point(3,4));
  c.add(new Point(5,6));
  c.add(new Point(7,8));
  System.out.println(c);
 
  Point p = new Point(1,2);
  boolean contains = c.contains(p);
  System.out.println("包含:"+contains);
 
  /*
   * 删除元素也是依靠元素equals比較進行删除的,如果集合有重複元素則
   * 隻删除一次。
   */
  c.remove(p);
  System.out.println(c);
    }      

集合隻能放引用類型元素,并且存放的也是元素的引用(位址)

public static void main(String[] args) {
  Collection c = new ArrayList();
  Point p = new Point(1,2);
  c.add(p);
 
  System.out.println("p:"+p);
  System.out.println("c:"+c);
 
  p.setX(2);
  System.out.println("p:"+p);
  System.out.println("c:"+c);
    }      

運作結果為

java集合架構Collection(一)
public static void main(String[] args) {
        Collection<String> c1 = new ArrayList<>();
//      Collection c1 = new HashSet();//HashSet是由HashMap實作的
        c1.add("java");
        c1.add("c++");
        c1.add(".net");
        System.out.println("c1:"+c1);
        
        Collection<String> c2 = new ArrayList<>();
        c2.add("ios");
        c2.add("android");
        c2.add("java");
        System.out.println("c2:"+c2);
        /*
         * addAll方法是取并集操作,會将給定集合中的所有元素添加到目前集合中。
         * 如果目前集合是Set集合,重複元素不能被再次添加進集合。
         */
        c1.addAll(c2);
        System.out.println("c1:"+c1);
        
        Collection<String> c3 = new ArrayList<>();
        c3.add("c++");
        c3.add("android");
        c3.add("php");
        System.out.println("c3:"+c3);
        /*
         * containsAll用于判斷目前集合是否包含給定集合中的所有元素
         */
        boolean contains = c1.containsAll(c3);
        System.out.println("全包含:"+contains);
        /*
         * removeAll用于删除目前集合中與給定集合的共有元素。給定集合中的元素
         * 不受影響。
         */
        c1.removeAll(c3);
        System.out.println("c1:"+c1);
        System.out.println("c3:"+c3);
    }

      

周遊集合

Iterator iterator

該方法可以擷取一個用于周遊目前集合元素的疊代器

java.util.Iterator接口,疊代器接口

疊代器接口規定了使用疊代器方式辦理集合的相關操作,不同的集合都提供了對應的 實作類,我們無需記住這些具體實作類的名字,隻要當作是Iterator看即可(多态),然後根據定義的相關操作周遊即可。

疊代器周遊集合遵循的原則是:問,取,删

其中删除元素不是必要操作。

public static void main(String[] args) {
        Collection<String> c = new ArrayList<>();
        c.add("one");
        c.add("#");
        c.add("two");
        c.add("#");
        c.add("three");
        c.add("#");
        c.add("four");
        c.add("#");
        c.add("five");
        System.out.println(c);
        
        @SuppressWarnings("rawtypes")
        Iterator it = c.iterator();
        /*
         * boolean hasNext()
         * 通過疊代器判斷集合是否還有下一個元素可以周遊
         */
        while(it.hasNext()) {
            /*
             * E next()
             * 通過疊代器周遊集合下一個元素
             */
            String str =(String)it.next();
            if("#".equals(str)) {
                //疊代器要求在周遊的過程中不得通過集合方法增删元素,否則抛異常
//              c.remove(str);
                //疊代器的remove方法可以将本次next()周遊的元素從集合中删除
                it.remove();
            }
            System.out.println(str);
        }
        System.out.println(c);
    }

      

結果如下

java集合架構Collection(一)