A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 许阳 黑马帝   /  2011-9-22 19:21  /  2487 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Java 集合问题:还有那些?

   1、Set(集):

    集合中的对象不按特定方式排列,并且没有重复对象。它的有些实现类能对集合中的对象按

特定方式排列。

     Set接口主要有两个实现类:HashSet和TreeSet,

     HashSet按照哈希算法来存储对象,具有很好的存取和查找性能,当向集合中添加一个对象时,
HashSet会调用对象的hashCode()方法来获得哈希码,然后根据这个哈希码进一步计算出对象在集合
中的存放位置。HashSet还有一个子类LinkedHashSet类,它在HashSet的基础之上实现了链表数据结
构,链表数据结构可以提高新增和删除元素的性能。

     TreeSet类实现了SortedSet接口(继承自Set),具有排序功能。有自然排序和客户化排序两种排
序方式:
     在jdk类库中,有一部分类实现了Comparable接口,该接口有一个compareTo(Object o)方法,
它返回整数类型。TreeSet调用对象的compareTo()方法比较集合中的对象的大小,然后进行排序,这
种排序方式称为自然排序。
     以下是jdk类库中实现了Comparable接口的一些类排序方式:
        Byte Double Float Integer Long Short  --->按数字大小排序;
        Character ---->按字符的Unicode值的数字大小排序;
        String    ---->按字符串中字符的Unicode值排序。
     使用自然排序时,只能向TreeSet集合中加入同类型的对象,并且这些对象的类必须实现了
Comparable接口。

   2、List(列表):
     集合中的对象按照索引位置排序,可以有重复对象。允许按照对象在集合中的索引位置检

索对象。该集合与数组有些相似。
   List接口的主要实现类:
     ArrayList:代表长度可变的数组。允许对元素的快速的随机访问,但是向ArrayList中插入与删除
元素的速度较慢。

     LinkedList:在实现中采用链表数据结构。对顺序访问进行优化,向List中插入和删除元素的速度
较快,随机访问速度较慢。随机访问是指检索特定索引位置的元素。LinkedList单独具有addFirst()、
addLast()、getFirst()、getLast()、removeFirst()、removeLast()方法,这些方法使得LinkedList
可以作为堆栈,队列和双向队列使用。

     List只能对集合中的对象按索引位置排列,如果希望对List中的对象按其他特定的方式排序,可以
借助Collections类和Comparable接口(或Comparator接口);Collections类是Java集合类库中的辅助类,
它提供了操纵集合的各种静态方法,其中sort()方法用于对List中的对象进行排序。
    》sort(List list):对象List中的对象进行自然排序。
    》sort(List list,Comparator comparator):对List中的对象进行客户化排序,comparator参数
指定排序方式。

   3、Map(映射):
     集合中的每一对元素包含一个键对象和值对象,集合中没有重复的键对象,值对象可以重复。它的有
些实现类能对集合中的键对象进行排序。
   向Map集合中加入元素时,必须提供一对键对象和值对象,从集合中检索元素时,只要给出键对象,就会
返回相应的值对象。
    Map有两种常用的实现:HashMap和TreeMap。
    HashMap按照哈希算法存储对象,有很好的存取性能;TreeMap实现了SortedMap接口,能对键对象进行
排序。TreeMap也支持自然排序和客户化排序。
    如果希望TreeMap对键对象进行客户化排序,可以调用它的另一个构造方法----TreeMap(Comparator comparator),
参数comparator指定具体的排序方式。

以上是我对Java中集合的一点小小总结,其中尚有我未知晓的地方,望看到该贴的同学多多指教,谢谢!

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2

查看全部评分

6 个回复

倒序浏览
黑马网友  发表于 2011-9-22 20:59:49
沙发
Vector类和Enumeration接口

Vector类可以用来保存若干对象,由于java没有提供动态数组,当要把若干不确定数目的对象保存在一种数据结构中,可以用Vector类
Enumeration接口,由于实现此接口的对象会生成一系列元素,一次只能生成一个,可以通过连续调用 nextElement()方法将返回一系列的连续元素

Collection接口与Iterator接口

由于Collection是一个接口,我们不能使用它直接创立实用对象,必须用实现了Collection接口的类来创建实例对象
接口Iterator,对集合进行迭代的迭代器
方法:
1 .是否存在下一个元素:hasNext() 如果仍有元素可以迭代,则返回 true。
2.next() 返回迭代的下一个元素。

  Stack
方法:push()进栈 pop()出栈empty()判断是否为空

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-22 21:25:14
藤椅
java.util.Map.Entry
java.lang.Comparable
java.lang.Iterable
java.lang.Comparator
AbstractList,AbstractSet

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-23 21:09:14
板凳
多谢楼上沙发总结的,现在Java集合差不多齐全了!:)
回复 使用道具 举报
黑马网友  发表于 2011-9-23 21:55:09
报纸
授人以鱼,不如授人以渔。
java给我们提供的api就是干这个的:
java.util
接口 Collection<E>
所有超级接口:
Iterable<E>
所有已知子接口:
BeanContext, BeanContextServices, BlockingDeque<E>, BlockingQueue<E>, Deque<E>, List<E>, NavigableSet<E>, Queue<E>, Set<E>, SortedSet<E>
所有已知实现类:
AbstractCollection, AbstractList, AbstractQueue, AbstractSequentialList, AbstractSet, ArrayBlockingQueue, ArrayDeque, ArrayList, AttributeList, BeanContextServicesSupport, BeanContextSupport, ConcurrentLinkedQueue, ConcurrentSkipListSet, CopyOnWriteArrayList, CopyOnWriteArraySet, DelayQueue, EnumSet, HashSet, JobStateReasons, LinkedBlockingDeque, LinkedBlockingQueue, LinkedHashSet, LinkedList, PriorityBlockingQueue, PriorityQueue, RoleList, RoleUnresolvedList, Stack, SynchronousQueue, TreeSet, Vector
这回java集合真的算是差不多了,嘿嘿

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2 呵呵……

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-23 22:30:04
地板
一些常用的Java库中的集合描述:
ArrayList 可以动态增长和缩减的索引序列
LinkedList 可以在任何位置进行高效地插入和删除操作的有序序列
ArrayDeque 用循环数组实现的双端队列
HashSet 没有重复元素的无序集合
TreeSet 有序集
EnumSet 包含枚举类型值的集
HashMap 存储健/值关联的数据结构
TreeMap 健值有序排列的映射表
EnumMap 健值属于美举类型的映射比表

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-23 23:44:11
7#
:lol ,多谢各位马友指点!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马