java 容器

容器,无非就是装其它东西的,数组,列表都是一种容器,下面先来看一下java中容器api的类图结构


左边的都是需要我们一个一个的向其中插入数据,但是右边的map就不同了,我们需要向里面插入数据的时候,我们要做的是一对一对的想里面插入。左边是一个Collection接口,在里面定义了一个个的方法,在它的下面有两个子集合,Set类似于我们数学中的集合,是不可以重复的,而且是没有顺序的,右边的是List是可以重复的,而且是有顺序的。我们可以看到在下面还有好多类实现了上面的接口,来帮助我们完成一些任务。

Collection c = new ArrayList ();
c.add("dgfd");

在使用容器的时候,我们可以定义一个父接口,然后让其指向一个子类,这样的话,当不想让c指向其它的容器的时候,我们换一下就好了,但是此时的定义我们是无法调用子类所特有的方法。而且在其中我们可以放入不同的类型的数据。

Collection c = new ArrayList ();
c.add(new Integer(1));
c.add(new Name ("java"));
c.remove(new Integer(1));
c.remove(new Name("java"));
当这段代码被执行的时候,我们会发现,第二个插入的java未被删除,这是什么原因呢,原因就是我们在执行remove和contiant方法的时候,我们都是通过equals方法,和hashcode这两个方法来进行的,所以当两个自定义类型对象在进行比较的时候,我们需要重写这两个方法,来实现对其相等的判别,HashCode并不是必须要用的,只有当我们的对象被当做索引来使用的时候,我们需要的是对其hashcode进行判断。

ArrayList和LinkList在性能上的区别:

底层的实现方式是不同的,ArrayList是通过动态数组来实现的,用的数据结构是顺序表,所以说当我们用它来执行一些根据位置查找指定元素的时候,效率会比较高的,但是当我们再执行删除,添加操作的时候会比较麻烦的,但是对于LinkList,它是通过链表的形式来实现的,通过这个我们可以高效率的是对于其中元素的插入和删除操作,只是去改变一下它的指向就好了,但是对于查找的时候效率就会比较低了,因为要从链表的第一个元素开始遍历,一个一个的向下遍历。对于具体的实现,准备期中考试之后,用java将这些数据结构都实现一下。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章