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的这两个方法是合适的,他就不会去覆盖。

相关文章
相关标签/搜索