Collection

COLLECTION.png
容器類型 容器中數(shù)據(jù)
Set 數(shù)據(jù)對象沒有順序且不可重復
List 數(shù)據(jù)對象有順序且可以重復
Map key-value映射對的方法
package mashibing.java;

import java.util.Collection;
import java.util.HashSet;

public class BasicContainer {
    public static void main(String[] args){
        Collection<Object> c = new HashSet<>();
        //父類引用指向子類對象
        c.add("Hello");
        c.add(new Name("f1","l1"));
        c.add(new Integer(100));

        c.remove("Hello");//String重寫了equals方法
        c.remove(new Integer(100));//integer重寫了equals方法,所以兩者對象相等
        //remove和add方法返回的都是布爾類型
        System.out.println(c.remove(new Name("f1","l1")));//name沒有重寫equals方法所以這是兩個對象
        System.out.println(c);
        
    }
}

class Name{
    private String firstName,lastName;
    public Name(String firstName,String lastName){
        this.firstName = firstName;
        this.lastName = lastName;
    }
    public String getFirstName(){
        return firstName;
    }
    public String getLastName(){
        return lastName;
    }
    public String toString(){
        return firstName + "" + lastName;
    }
    
    public boolean equals(Object obj){
        if(obj instanceof Name){
            //如果obj是Name的一個子類,那么把obj強制轉(zhuǎn)化成Name類
            Name name = (Name)obj;
            return (firstName.equals(name.firstName))
                    &&(lastName.equals(name.lastName));
        }
        return super.equals(obj);
        //如果它都不是Name類,那么交給object的equals來處理,也就是==
        
    }
    /*
     * 容器類對象在調(diào)用remove,contains等方法的時候,需要比較對象是否相等,這會涉及到
     * 對象類型的equals方法和hashCode方法,對于自定義的類型,需要重寫equals方法和
        hashCode方法以實現(xiàn)自定義的對象相等規(guī)則,因為原本的Object的對象的equals方法是==,
        也就是需要兩個引用的是同一個對象才能equals
        注意:相等的對象應該具有相等的hash codes,在map調(diào)用的時候,會使用hashcode方法
     */
    
    public int hashCode(){
        return firstName.hashCode();
    }
}

介紹下Iterator接口:

package mashibing.java;

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

public class Test {
 public static void main(String[] args){
  Collection<Object> c = new HashSet<>();
  //set是沒有順序的,且不可以重復的
  c.add(new Name("f1","l1"));
  c.add(new Name("f2","l2"));
  c.add(new Name("f3","l3"));
  Iterator<Object> i = c.iterator();
  /*
   * Collection接口有一個方法叫做iterator,這個方法返回的是一個實現(xiàn)了了
   * Iterator接口的對象,Iterator有三個方法,hasNext,查看是否有下一個對象
   * next方法,返回下一個對象還有一個remove方法,該remove方法是在迭代中刪除元素唯一
   * 安全的方法
   */

  while(i.hasNext()){
   Name n = (Name)i.next();
   //這里知道返回的是一個Name對象,那么就就返回的強制轉(zhuǎn)換成Name
   System.out.print(n.getFirstName()+"  ");
  }
 }
}

Interator循環(huán),三個方法的使用

package mashibing.java;

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

public class Remove {
 public static void main(String[] args){
  Collection<Object> c = new HashSet<Object>();
  c.add(new Name("fff1","llll"));
  c.add(new Name("f2","l2"));
  c.add(new Name("ffff3","lll3"));
  for(Iterator<Object> i = c.iterator();i.hasNext();){
   //這里for循環(huán)只有兩個條件,一個是產(chǎn)生這么一個Iterator對象,
//   另外一個是還有下一個值
   Name name = (Name)i.next();
   if(name.getFirstName().length()<3){
    i.remove();
    /*
     * 這里使用了Iterator接口的remove方法,因為Iterator循環(huán)內(nèi)部中
     * 在操作數(shù)據(jù)的時候講數(shù)據(jù)鎖定了
     * 如果我們換成c.remove(name)就會產(chǎn)生例外
     */
   }
  }
  System.out.println(c);
 }
}

Set

增強的for循環(huán)

package mashibing.java;

import java.util.ArrayList;
import java.util.Collection;
//增強的for循環(huán)
public class EnhanceFor {
 public static void main(String[] args){
  int[] arr = {1,2,3,4,5};
  for (int i : arr) {
   System.out.println(i);
  }
  //缺點是只能看不能按照下標來修改,好處就是語法比較簡單
  Collection<String> c = new ArrayList<String>();
  c.add(new String("aaa"));
  c.add(new String("bbb"));
  c.add(new String("ccc"));
  for(Object o:c){
   System.out.println(o);
  }
 }
 
}

Set是不能重復的但是沒有順序的集合

package mashibing.java;

import java.util.HashSet;
import java.util.Set;

public class Testset {
    public  static void main(String[] args){
        Set<Object> s = new HashSet<Object>();
        s.add("hello");
        s.add("world");
        s.add(new Name("f1","f2"));
        s.add(new Integer(100));
        s.add(new Name("f1","f2"));
        s.add("hello");
        System.out.println(s);
        /*
         * 如果兩個元素equals,那么add是添加不進去的。所以這里Set的結(jié)果是
         * [hello, 100, f1f2, world]順序無所謂,因為Set本身就沒有順序
         */
    
    }
}

Set接口是Collection的子接口,Set接口沒有提供額外的方法,但是Set容器中得元素是沒有順序的,而且是不可以重復,Set容器類有HashSet、TreeSet等。

package mashibing.java;

import java.util.HashSet;
import java.util.Set;

public class Testset2 {
    public static void main(String[] args){
        Set<Object> s1 = new HashSet<Object>();
        Set<Object> s2 = new HashSet<Object>();
        s1.add("a");
        s1.add("b");
        s1.add("c");
        
        s2.add("d");
        s2.add("a");
        s2.add("b");
        
        Set<Object> sn = new HashSet<Object>(s1);
        sn.retainAll(s2);//求交集
        Set<Object> su = new HashSet<Object>(s1);
        su.addAll(s2);
        /*
         *  把s2添加到啊su中,但是重復的是添加不進來的因為Set中只能有不重復的
         * 所以su打印出來的結(jié)果是[d, b, c, a]
         */
        System.out.println(sn);
        System.out.println(su);
        
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 集合類簡介 為什么出現(xiàn)集合類?面向?qū)ο笳Z言對事物的體現(xiàn)都是以對象的形式,所以為了方便對多個對象的操作,就要對對象進...
    阿敏其人閱讀 1,560評論 0 7
  • 集合框架體系概述 為什么出現(xiàn)集合類?方便多個對象的操作,就對對象進行存儲,集合就是存儲對象最常用的一種方法. 數(shù)組...
    acc8226閱讀 915評論 0 1
  • 前言:一名iOS開發(fā)工程師,正在學習Android開發(fā),期待各路大神指點和學習交流.學習交流討論及資料獲取請關(guān)注:...
    極客James閱讀 4,521評論 0 5
  • Java 集合類是一種特別有用的工具類,大致可分為Set、List、Queue、Map四種體系。 Set代表無序、...
    ifeelok0319閱讀 354評論 0 0
  • 為什么會出現(xiàn)集合類? 我們都知道數(shù)組的弊端是長度固定。這樣一來,數(shù)組就不能滿足變化的要求。所以,Java就提供了集...
    官先生Y閱讀 1,122評論 0 3

友情鏈接更多精彩內(nèi)容