java 集合

来源:互联网 发布:smb端口 编辑:程序博客网 时间:2024/06/16 11:07

在API中,应用最多的类集中,集合算是其中之一了。下面就集合进行简单的描述,先上个图,理下集合中的类之间的关系。

一、Set、List、Map的区别:

(1)set-保证成员唯一 , 支持数学中的集合操作,如交、并;(不考虑极端的作法将compareTo与compare方法中,两者相同也不返回0的)   (无序的,不可以重复且没有索引)
(2)list-支持成员顺序,提供按索引访问成员;   (有序的,且可以重复,集体中用索引)
(3)Map-成员为键值对,提供按键对象查找值对象

二、Collection与Map的区别

 Map并没有实现Collection接口,因为Collection类型中每个位置都是单独的一个个,而Map类型,是pair成双的有Key-Value对的,更像个小型数据库。
 注意集合中的存储都是对象的引用(地址),并不是把元素对象存入对集合中。 Collection集合中取出元素是用迭代 Iterator接口的方式来搞定。 
三、Set集合

  Set接口提供了一系列的方法,子类在实现时提供了一个简单的抽象类AbstractSet类,此类实现了简单的removeAll(Collection agr)等方法。使得子类TreeSet与HashSet只需要继承AbstractSet即可。

  TreeSet:是一种有序的结构类似二叉树结构,使得外部可以有序地遍历成员;附加实现了 SortedSet, 支持子集等要求顺序的操作。但对TreeSet中的成员要实现Comparable或者使用Comparator来构造TreeSet。

  HashSet:是一种无序的结构,它依靠hashCode方法。hashCode方法是从Object类中函数过来的,默认是按地址散列着。所以若想实现类的属性值都是一致时,认为两个对象是相同要不存储在HashSet中,则需要覆盖hashCode方法。有个原则是 若equals相同时,则hashCode是相同的。其实重写HashCode只是为了提供效率,本质上比较还是equals,由于有了hashCode方法使得对象在比较时基本上在hashCode方法中就可以得出是否相同了。  (注意hashCode方法使用不当会造成内存泄露着,比如先把对象add进HashSet后,又用此对象引用将对象属性值改变了,接着用remove方法时,并没有删除掉。因为remove中的hashCode与原有的add时的hashCode不相等找不到原有对象了)

四、List集合

  List提供了基于索引的方式来访问集合中的元素,且List集合有中个特有的迭代器ListIterator,需要注意的是在迭代时不要用集合对象中的方法(如add、remove等方法)操作集合中的元素,因为会发现ConcurrentModificationException。与AbstractSet类似,List也提供了AbstractList抽象类。List集合可添加重复或null元素哦。

 ArrayList:底层是数组结构,查询快,但增删稍慢。它是线程不同步的。

 ListedList:底层是链接结构,增删快,查询慢。

 Vector:底层也是数组结构。但线程是同步的,它是JDK1.0 出来的,现在基本上被ArrayList取代了。

 Stack :这个类从Vector派生而来,并且增加了方法实现栈,一种后进先出的存储结构。

五、Map集合

  Map提供了以键值对的方式,一对一对的往里面存储,且保证键的唯一性。Key键决定了此Key-Vaule在映射中的存储位置。

  Hashtable:底层是哈希表结构,null不能作为键或值存在,它是线程同步的。

  HashMap:底层也是哈希表结构,允许使用null作为键或值,它是线程不同步的。

  TreeMap:底层是二叉树结构,可以用于给Map集合中的Key进行排序。

  Properties:是继承自Hashtable,具有Map集合特别,但里面存储的键值都是字符串,它是集合中与IO技术相结合的集合容器。特别是用于键值对形成的配置文件,可用相应的load(InputStream is)及store(OutputStream os,String notes)

六、Arrays与Collections

 Arrays与Collections都是工具类,可对数组与集合提供了功能强大的操作,所以它们的方法几乎都是静态方法。

 Collections可对Collection进行增加排序、反序最大最小等等操作。

原创粉丝点击