集合
集合可以分位单列集合和双列集合
- 单列集合
Collection:是单例集合的根接口,用于存储一系列符合某种规则的元素。Collection集合一共有两个子接口,分别对是List和Set。其中,List集合的特点是元素有序,可以重复;Set集合的特点是元素无序并且不可重复。List接口主要实现的类有ArrayList和LinkList;Set接口主要实现的类有HashSet和TreeSet。
- List接口下有ArrayList和LinkList接口,两者的区别在于ArrayList内部的数据存储结构时数组形式,在增加或者删除指定位置的元素时会创建新的数组,效率低,不适合大量的增删操作;LinkList是为了克服这个问题而实现的另外一个实现类。
- 关于Collection集合的遍历方法
Iterator遍历;foreach遍历;forEach遍历(JDK 8) - Set接口特点是无需无重复
该接口下实现了HashSet和TreeSet两个实现类;HashSet是根据对象的哈希值来确定元素在集合中的位置;TreeSet则是以二叉树的方式来存储元素。
注意:在HashSet实现类中,当存储数据时调用了hashCode()方法和equals()方法,所以要对这两个方法进行重写。
- 双列集合
Map:是双列集合的根接口,用于存储具有键(Key),值(Value)映射关系的元素。Map集合中每个元素都包含一对键值,并且Key是唯一的,在使用Map集合时,可以通过指定的Key找到对应的Value。Map接口主要的实现类有HashMap和TreeMap。
- HashMap集合
该集合的键和值允许为空,但键不能重复,且集合中的元素是无序的。
HashMap集合的遍历
使用Iterator迭代器进行遍历:
在遍历前需要先将Map集合转换为Iterator接口对象,然后进行遍历,由于Map集合中的元素是由键值对组成的,所以使用Iterator接口遍历Map集合时,会有两种将Map集合转换为Iterator接口对象再进行遍历的方法,即keySet()方法和entrySet()方法。
使用keySet()方法:
Set keySet=map.keySet();
Iterator it=keySet.iterator();
while(it.hashNext()){
Object key=it.next();
Object value=map.get(key);
}
使用entrySet()方法:
Set entrySet=map.entrySet();
Iterator it=entrySet.iterator();
while(it.hashNext()){
Map.Entry entry=(Map.Entry) (it.next());
Object key=entry.getKey();
Object value=entry.getValue();
}
使用forEach方法遍历Map集合
该方法的使用跟单列集合使用相同。
-
TreeMap集合
使用方法跟单列集合TreeSet一样,可以看文章上面。 -
Properties集合
Map集合当中还有一个实现类Hashtable,它和HashMap十分相似,其中主要的区别在于Hashtable是线程安全的。但Hashtable类有一个子类Properties在实际开发应用中非常重要,Properties主要用来存储字符串类型的键和值,在实际开发中,经常使用Properties集合类来存取应用的配置项。
泛型
使用泛型可以将确定整个集合是数据类型,避免在将整个集合进行强制转换时发生错误。
集合常用工具类
1.Collections
2.Arrays
Collections是对集合进行操作的,Arrays是对数组进行操作的。
在Arrays下有:
使用sort()方法进行排序;使用binarySearch(Object[] a,Object key)方法查找元素,使用该方法我们需要注意的是,该方法指针对排序后的数组进行元素查找,因为该方法采用的是二分法查找;使用copyOfRange(int [] original,int from,int to)方法拷贝元素;使用fill(Object[] a,Object[] val)方法替换元素。
聚合操作
聚合操作的步骤:
1.将原始集合或者数组对象转换为Stream流对象;
2.对Stream流对象中的元素进行一系列的过滤,查找等中间操作,然后仍然返回一个Stream流对象;
3.对Stream流进行遍历,统计,收集等终结操作,获取想要的对象。