现在的位置: 首页 > 综合 > 正文

Java中的容器

2013年10月01日 ⁄ 综合 ⁄ 共 1905字 ⁄ 字号 评论关闭

        平常我们用数组来存放东西,数组存取确实挺方便的,但是数组的容量是个限制。每次存放东西时,必须判断是否超出范围了,太不灵活了,并且数组中的类型还必须是相同的类型,要是int都是int,哎,想放个string类型,必须重新new数组,当然不相同类型的东西放到一块确实不好,但是无论怎么样,就是不方便,不灵活啊。。

        要想灵活,要想不受限制,就得找java容器:javaAPI所提供的一系列类的实例,用于在程序中存放对象。

         java所提供的容器,容量这个嘛,不用担心,随便添加,至于添加类型,也不用担心,可以随便存放,可以存放一只狗,可以存放一个人,人与狗同在,相处融洽,快活自在,挺好挺好滴,蛮适合我的生活口味滴哈。。

 

         java中提供的容器结构图如下,只有掌握此图就可以了,至于其中的方法什么的,我们到时候可以直接查api文档哈。

       

   

   简单介绍一下这个图:

    其中Set中的数据对象没有顺序并且不可以重复。所以每个人打印出来的东西顺序不同,很正常。

     List中的数据对象有顺序并且可以重复。

      Map接口定义了存储键值对方法,其中的键(Key)相当于一本书的目录,而值(value)相当于真正的内容。所以键Key不能重复。若是存在重复,则后面的内容会替代前面的内容。

     LinkedList 和ArrayList  的区别:

     LinkedList的底层的数据结构是链表形式,链表的内存空间是散列形式。

     

  ArrayList的底层的数据结构是数组形式,数组的内存空间是连续的。

  

  其中ArrayList的读取速度快,若是想读取某一个内存空间,比如最后一个,直接使用第一个+偏移量即可。

   而LinkedList的读取速度慢,是一个节点next,一个节点next寻找。

   但是。ArrayList 的修改速度慢。若是删除数组中某一个值,则其后的值会一个个不断向前移动,若是添加数组中某一个值,则其后的值会一个个不断向后移动。

    而LinkedList的修改速度快,若是删除、添加链表中的一个节点,直接更改指针。

   

      上述容器中虽然可以装载任何类型的对象,但是这样效率不高,为什么呢?因为向容器中存放的对象,完全当成object,即使存放的具体的Dog,还是存放的具体的Person。然后读取数据的时候,需要转型,把Object转化成相应的Person或者Dog。

        所以,我们还是最后放同样对象吧,这样不需要转型,不用降低效率,是不是使用数组啊?数组可是存放的相同的对象啊。当然不是喽,数组容量可以一个限制,不爽。需要一种像java提供的容器  ,又可以像数组一样放同样的对象,那是什么呢?哈哈,那就是集合了两者的优点一身的泛型。。

        泛型,容量当然没有限制,操作又方便,直接把对象add进去即可,丢掉一个对象直接remove即可。存放相同的类型的对象。

       比如这个容器中完全是Dog类,到时候直接取出来即可,而不用再判断是否是Dog类了,不用再转成Dog类,因为前提就已经声明这个是装Dog的,List<Dog> c=new ArrayList<Dog>();不需装Person,否则后果自负哈。。

      那紧接着把所有的好看的狗统统装进去了,此时我想看看我都装了那些狗哈,如何办?这就涉及到了一个接口Iterator,涉及到一个方法iterator。此方法iterator,所有实现上图中Collection接口的类都实现了此iterator方法。

       Iterator对象称作迭代器,用以方便地遍历。

       Iterator中的方法:hasNext:判断是否还有下一个。next:表示下一个对象。哎呀,so convenient!!!!!

       

    for(Iterator<Dog> it =c2.iterator();it.hasNext();)

     {

      Dog dog =it.next();

       System.out.println(dog);

    

     } 

        所有的狗我看了一遍,但是我想看看哪个狗最帅,哪个狗年龄最大?怎么办?哈哈,这有涉及到一个接口Comparable 。

        若想排序,只要实现Comparable接口,重写其中的compareTo方法即可。

        

        恩呢,java容器只要掌握上述那个图,以及Iterator接口、Comparable接口。若遇到不懂的方法可以及时找帮助哈。

 

抱歉!评论已关闭.