1.什么是Java container?
顾名思义,它是一个Java容器,容器一般是用来装东西的,而Javacontainer是用来装数据的。我们在使用Java时,会声明很多对象,但是对象管理很不方便,有了容器之后我们能方便的通过容器类来管理自己的对象。如Java中的Collection和Map,都是容器。
2.容器有什么好处?
在管理数据对象方面,不同的容器有不同的特性,若果不用容器,管理对象特别麻烦。比如你定义了一个Person类,但是你现在想要声明多个人p1,p2…等,你要多个变量保存,但是用了collection之后你只需要add方法添加到set里面就好了。当然不同的容器实现由不同的特点:
List承诺可以将元素维护在特定的序列中。它的优点在于随机访问元素快,但是在中间插入和移除比较慢那么现在我们就一起来看看为什么ArrayList随机访问快,而插入移除比较慢。LinkedList它是通过代价较低在List中间进行插入和移除,提供了优化的顺序访问,但是在随机访问方面相对较慢。但是他的特性功能要比ArrayList强大的多。支持Queue和StackListedList采用的是链式存储。链式存储就会定一个节点Node。包括三部分前驱节点、后继节点以及data值。所以存储存储的时候他的物理地址不一定是连续的。
Set也是一个集合,但是他的特点是不可以有重复的对象,所以Set最常用的就是测试归属性,很容易的询问出某个对象是否存在Set中。并且Set是具有和Collection完全一样的接口,没有额外的功能,只是表现的行为不同。HashSet查询速度比较快,但是存储的元素是随机的并没有排序。TreeSet是将元素存储红-黑树结构中,所以存储的结果是有顺序的(所以如果你想要自己存储的集合有顺序那么选择TreeSet)。
list set queen
队列是典型的先进先出的容器,就是从容器的一端放入元素,从另一端取出,并且元素放入容器的顺序和取出的顺序是相同的。LinkedList提供了对Queue的实现,LinkedList向上转型为Queue。其中Queue有offer、peek、element、pool、remove等方法。offer是将元素插入队尾,返回false表示添加失败。peek和element都将在不移除的情况下返回对头,但是peek在对头为null的时候返回null,而element会抛出NoSuchElementException异常。poll和remove方法将移除并返回对头,但是poll在队列为null,而remove会抛出NoSuchElementException异常Map在实际开发中使用非常广,特别是HashMap,想象一下我们要保存一个对象中某些元素的值,如果我们在创建一个对象显得有点麻烦,这个时候我们就可以用上map了,HashMap采用是散列函数所以查询的效率是比较高的,如果我们需要一个有序的我们就可以考虑使用TreeMap。这里主要介绍一下HashMap的方法,大家注意HashMap的键可以是null,而且键值不可以重复,如果重复了以后就会对第一个进行键值进行覆盖。put进行添加值键对,containsKey验证主要是否存在、containsValue验证值是否存在、keySet获取所有的键集合、values获取所有值集合、entrySet获取键值对。