Java学习之集合
在Hadoop里面,接触最多的就是MapReduce框架,在Map里面就有Java里面集合的概念。Java里面的集合跟数组一样,都是可以看做容器,不同的是集合存放的是对象(对象类型可以不同),而数据是存放的数据基本类型。
在集合的框架里面,常用的两个子接口分别是List和Set.
List:可存放重复的元素,元素存储时有序的;
Set:不可以存放重复的元素,元素存放是无序的。
List里面有ArrayList类和LinkedList,ArrayList的特点是查询快,插入慢;原因是当往ArrayList(数组列表)某个位置插入数据的时候,它是将后面的元素都往后移,所谓的牵一发动全身。LinkedList是链表的模式。
因此,在查询较多的情况下,使用ArrayList是较优的选择,如果数据插入较频繁,可以使用LinkedList.
Java中List集合的学习
首先,我们写一个类(比如是人),里面生成get和set方法;然后创建1000个人,List集合这个泛型里面存放的Person这个类。
主体代码如下所示,我们可以看到,new出来的对象都是同一个。所以,这样的话并没有完成预期的效果。
Person p = new Person();
这句代码一共完成了3个动作:
1:定义了一个变量p;
2:new了一个对象(在堆区里面,堆区里面存放的是对象);
3:指针指向了这个新创建的对象。
但是,List集合是允许重复的元素,但操作的是同一个对象在堆里面,所有的数组中的对象的引用都指向p这同一个对象的地址,所以输出的结果都是同一个,也就是最后一个元素。因此,需要将代码改一下,循环创建1000个对象,再来操作对象的属性。这样就可以实现预期的效果。
Java中Map的学习
在Java的集合体系中,今天来学习下Map。这个在大数据的MapReduce里面会被广泛运用到。那么,Map是个什么样的形式呢。Map其实是一种Key-Value对的集合(Key值不能重复),而在Map里面每一个K-V对可以被看为是一个Entry(条目),所以在Map这个集合里面也可以看作是一个个的Entry.因此,对Map进行迭代的时候,我们有三种方式:对Key的迭代(通常情况下可以通过Key找到Value),对value的迭代和对Entry的迭代。另外,通过查看Map集合在Java里面的源代码,可以发现Map接口是单独的接口,没有继承其他任何的接口(如下图所示)。
接下来,看看对map的迭代方式,上面提到过,如果我们想得到map里面所有的元素可以通过遍历Entry的方式(map里面有entryset方法,我们可以将所有的Entry放入Set集合),这样可以读出Key-Value的结果;也可以通过只迭代Key的方法(map中的keyset方法),一样可以得出所有的Key-Value对。实现的例子,如下面所示。