Java容器类--Collection

 Java容器类类库的用途是"保存对象",并将其划分为两个不同的概念:

1)Collection。一个独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,而Set不能有重复元素。Queue按照排队规则来确定产生的顺序(通常与它们被插入的顺序相同)。

2)Map。一组成对的”键值对“对象,允许你使用键来查找值。ArrayList允许你使用数字来查找值,因此在某种意义上讲,它将数字与对象关联在了一起。映射表允许我们使用一个对象来查找某个对象,它也被称为”关联数组“,因为它将某些对象与另外一些对象关联在了一起;或者被称为”字典“,因为你可以使用键对象来查找值对象,就像在字典中使用单词来定义一样。Map是强大的编程工具。

      尽管并非总是这样,但是在理想情况下,你编写的大部分代码都是在与这些接口打交道,并且你唯一需要指定所使用的精确类型的地方就是在创建的时候。因此,你可以像下面这样创建一个List:

      List<Apple> apples = new ArrayList<Apple>();

      注意,ArrayList已经被向上转型为List,这与前一个示例中的处理方式正好相反。使用接口的目的在于如果你决定去修改你的实现,所需的只是在创建出修改它,就像下面这样:

      List<Apple> apples = new LinkedList<Apple>();

      因此,你应该创建 一个具体类的对象,将其转型为对应的接口,然后在其余的代码中都使用这个接口。

      这种方式并非总能奏效,因为某些类具有额外的功能,例如,LinkedList具有在List接口中示包含的额外方法,而TreeMap也具有在Map接口中未包含的方法。如果你需要使用这些方法,就不能将它们向上转型为更通用的接口。

Collection接口概括了序列的概念-----一种存放一组对象的方式。下面这个简单的救命使用Integer对象填充了一个Collection(这里用ArrayList表示),然后打印所产生的容器中的所有元素:

     import java.util.*;

 

     public class SimpleCollection{

          public static void main(String[] args){

              Collection<Integer> c = new ArrayList<Integer>();

              for(int i=0;i<10;i++)

                   c.add(i);

              for(Integer i:c)

                   System.out.print(i+"  ");

         }

      }

     因为这个示例只使用了Collection方法,因此任何继承自Collection的类的对象都可以正常工作,但是ArrayList是最基本的序列类型。

     add()方法的名称就表明它是要将一个新元素放置到Collection中。但是,文档中非常仔细地叙述到:” 要确保这个Collection包含指定的元素。“这是因为考虑到了Set的含义,因为在Set中只有元素不存在的情况下才会添加。在使用ArrayList,或者任何种类的List时,add()总是表示”把它放进去“,因为List不关心是否存在重复。

     把所有的Collection都可以用foreach语法遍历,就像这里所展示的。

 

 

ArrayList和LinkedList都 是List类型,从它们都按照插入的顺序保存元素。两者的不同之处在于执行某些类武进的操作时的性能,而且LinkedList包含的操作也多于ArrayList。

HashSet、TreeSet、LinkedHashSet都是Set类型,每个相同的项只有保存一次,不同的Set实现存储的方式也不同。HashSet使用的是相当复杂的方式来存储元素的,它是最快获取元素的方式,因为存储顺序看起来无实际意义。如果存储顺序很重要,那么可以使用TreeSet,它按照比较结果的升序保存对象;或者使用LinkedHashSet,它按照被添加的顺序保存对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值