一,数组和集合
(1)数组可以储存基本数据类型,是用来存对象的一种容器,但是数组的长度
是固定的,不适合再对象数量未知的情况下使用,
(2)集合只能用来存储对象,对象类型不可以,长度可变,可再多数情况下使用
**二,层次关系**
Collection接口是集合类的根接口,Java中没有提供这个接口的直接实现类。但是
却让其他被继承产生两个接口,就是set和list。set中不能包含重复的元素,里面的元素是无序的。list是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式
Map是Java.util包中的另一个接口,它和collection接口没有关系互相独立,但是都是属于集合类的一部分。map包含了key-value对。map不能包含重复的key,但是可以包含相同的value
**三,几种重要的接口和类简介**
1.list里面存放的对象是有序的,也是重复的,list关注的是索引,拥有一系类和索引相关的方法,
查询速度快。因为往list集合里面插数据或者删除数据时,会伴随着后面数据的移动,所以插入,删除数据慢
2.set (无序,不可重复)
set里面存放的对象是无序的,不可重复的,集合中的对象不按特定的方式排序(添加删除快)
3.map(键值对,键唯一,值不唯一)
map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先的到键的set集合,对set集合进行遍历,得到响应的值collection,是无序的,允许元素重复
**四,遍历**
再类中提供了以下四种的常见输出方式:
1)iterator:迭代输出,是使用最多的输出方式
2)listIterator:是iterator的子接口,专门用于输出list中的内容
3)foreach输出:jdk1.5以后提供的新功能,可以输出数组或集合
4)for循环
**五,ArryList和LinkedList**
ArrayList和LinkedList在用法上没有区别,但是在功能上还是有区别的。
linedList经常用在增删操作较多而查询操作较少,arryList查询较多,增删教少
**六,Map集合**
实现类:HashMap,hashtable,linkedhashmap和treemap
HashMap
HashMap是最常用的Map,它根据键的HashCode值存储数据,根据键获取它的值,
具有很快的访问速度,遍历时,获得数据的顺序是完全随机的。因为键对象不可重复,所以HashMap。
最多只允许一条记录为null,允许多条记录的值为空为null,是非同步的Hashtable
hashtable与hashmap类似是,是HashMap的线程完全版,它支持线程的同步,
即任意时刻只有一个线程能写Hashtable,因此也导致hashtable在写入时会比较慢,它继承自dictionary类,不同的是它不允许记录的键或者值为null,同时效率降低
map遍历
第一种:keyset()
将map中所有的键存入到set集合中。因为set具备迭代器。所以可以迭代方式
取出所有的键,再根据get方法。获取每个键对应的值。keyset():只能通过get取key。
取到的结果会乱序,是因为取得数据主键的时候,使用hashmap。keyset()方法,而这个方法返回的set结果,里面的数据乱序排放
第二种:entrySet()
set<map.entry<k,v> >entryset()//返回此映射中包含的映射关系的set视图。(一个关系就是
一个键-值对),就是把(key-value)作为一个整体一对一的存放到set集合中。map.entry表示映射
关系。entryset():迭代后可以e.getkey(),e.getvalue()两种方法来取key和value。返回entry接口。
推荐使用第二种方法,即entryset()方法,效率较高
对于keyset其实已经是遍历了2次,一次是转为iterator,一次是从hashmap中取出key
所对于的value。而entryset只是遍历了一次,他把key和value都放到entry中,所有快了。两次遍历时间相差还是比较明显的。