集合

来源:互联网 发布:玉伯 数组去重 编辑:程序博客网 时间:2024/06/10 12:29

集合


  • 集合
      • Set
      • Map
      • Collections
        • 同步控制

数组里保存的可以是对象的值,也可以是对象,而集合只能保存对象。
集合的父类为Collection,Map。Set、Queue、List继承自Collection,xxMap都是继承自Map。
比较多用为ArrayList,HashSet,HashMap,使用迭代器iterator来遍历,有三个通用方法,hasNext,next,remove,继承自接口类Iterator;

可以使用父类的多态来构建集合的具体实例,使用具体实例来构建迭代器,直接实例.iterator(),指定是谁的迭代器,三个方法才有意义;
循环访问的另一个,foreach,就是for(A a : List)。

Set

在Set里判断2个元素是否相等的依据是使用.equals方法,如果返回true表示相等,但是这样会存在一个缺陷,就是当使用new构造的2个对象它们的内容相同时,第二个想放入Set里的元素会添加失败,因为使用equals它们是相等的,即使它们明明不是一个对象,用户希望2个都存进去(使用==判断的话是false,但是Set的依据是equals)。
HashSet会调用对象的hashCode()方法来获得该对象的hashCode值,然后会根据该HashCode值来决定对象在HashSet中的储存位置,因此HashSet除了以equals的结果来作为判断元素是否相等外,还使用对象的hashCode值作为判断,这就解决了上诉问题;在获取HashSet对象里的元素时,就是用hashCode来作为索引的。

Map

Map和HashMap的区别和Set和HashSet非常类似。
Map的key集就是一个Set,所以Hash的体现在key集里,而values集类似于List。

Collections

注意和接口类Collection有区别
Collections时操作集合的工具类,里面提供了很多操作集合类的方法,比如排序、交换内容等。
在排序方法sort(List list,Comparator c)中,Comparator是让list按照指定的Comparator产生的顺序对List集合进行排序,比如:

public class PinyinComparator implements Comparator<Friends> {    public int compare(Friends o1, Friends o2) {        if (o1.getLetters().equals("@")                || o2.getLetters().equals("#")) {            return -1;        } else if (o1.getLetters().equals("#")                || o2.getLetters().equals("@")) {            return 1;        } else {            return o1.getLetters().compareTo(o2.getLetters());        }    }}

返回负数表示前者小于后者,在排序时放在前面;返回正数表示后者大于前者,在排序时放在后面。

同步控制

Collections类提供类多个synchronizedXXX(集合类的对象)方法,XXX对应于不同集合类型,这个方法返回支持同步的集合类对象。
比如:

List list = Collections.synchronizedList(new ArrayList());  //list支持同步
原创粉丝点击