Set和List如何轉換

 

數組轉Collectionjava

使用Apache Jakarta Commons Collections:apache

  1. import org.apache.commons.collections.CollectionUtils;   
  2.   
  3. String[] strArray = {"aaa", "bbb", "ccc"};   
  4. List strList = new ArrayList();   
  5. Set strSet = new HashSet();   
  6. CollectionUtils.addAll(strList, strArray);   
  7. CollectionUtils.addAll(strSet, strArray);  

CollectionUtils.addAll()方法的實現很簡單,只是循環使用了Collection的add()方法而已。數組

若是隻是想將數組轉換成List,能夠用JDK中的java.util.Arrays類:spa

  1. import java.util.Arrays;   
  2.   
  3. String[] strArray = {"aaa", "bbb", "ccc"};   
  4. List strList = Arrays.asList(strArray);  

不過Arrays.asList()方法返回的List不能add對象,由於該方法的實現是使用參數引用的數組的大小來new的一個ArrayList。對象

Collection轉數組繼承

直接使用Collection的toArray()方法,該方法有兩個重載版本:內存

  1. Object[] toArray();   
  2.   
  3. T[] toArray(T[] a);  

Map轉Collectionelement

直接使用Map的values()方法。hash

List和Set轉換io

List list = new ArrayList(new Hashset());// Fixed-size list
List list = Arrays.asList(array);// Growable
list list = new LinkedList(Arrays.asList(array));// Duplicate elements are discarded
Set set = new HashSet(Arrays.asList(array));

//=============================================================//

---------------------------------------------------------------

List list = new ArrayList(new Hashset());
Set set = new HashSet(list);
---------------------------------------------------------------

// Fixed-size list
     List list = Arrays.asList(array);
    
     // Growable list
     list = new LinkedList(Arrays.asList(array));
    
     // Duplicate elements are discarded
     Set set = new HashSet(Arrays.asList(array));

//========================================================//

import java.util.*;

public class test3 {
public test3() {
}

public static void main(String[] args){
String xx = new String("1");
String yy = new String("2");
List list = new ArrayList();
list.add(xx);
Set set = new HashSet(list);
System.out.println(set.contains(xx));
System.out.println(set.contains(yy));
}
}

——————————————————————————————————
true
false

//================================================================//

解釋一下 Object的hashCode返回值基本上是對象的內存地址 Object的equals方法判斷兩個Object對象是否「相等」的依據實際上是兩個對象是否「相同」 因此,若是obj1 和 obj2 都是Object實例,那麼 obj1.equals(obj2) 和 obj1 == obj2 是等價的 equals和hashCode這兩個方法的關係是: 若是兩個對象equals返回true,那麼它們的hashCode必須返回相同的integer值。反之,則不作要求,但建議是:若是它們返回相同的hashCode,那麼equals應該返回true。 由於上面的緣由,若是某個類覆蓋了Object的equals方法,那它就必須覆蓋hashCode方法,以知足上述要求。 對於本身定義的類,是否要覆蓋這些方法,徹底取決於本身的須要,若是須要放寬兩個對象相等的條件,就須要覆蓋。若是不須要,就用Object的實現好了,徹底沒有問題。 例如,對於Integer類,它須要將兩個Integer相等的條件放寬到只要它們包含的數值相等,兩個對象就相等,它就會覆蓋equals方法,同時,它必須覆蓋hashCode方法,返回值很簡單,就是它包含的整型值。 再例如,Thread類就沒有覆蓋這兩個方法,它做爲Object的直接繼承,寫Thread類的人認爲繼承使用Ojbect的這兩個方法是合適的,他就不會去覆蓋。

相關文章
相關標籤/搜索