集合体系
Collection:
|--List:元素是有序的,元素可以重复。因为该集合体系有索引。
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
|--Set:无序,不可以重复元素。
|--HashSet:数据结构是哈希表。线程是非同步的。
保证元素唯一性的原理:判断元素的hashCode值是否相同。
如果相同,还会继续判断元素的equals方法,是否为true。
|--TreeSet:可以对Set集合中的元素进行排序。
底层数据结构是二叉树。
保证元素唯一性的依据:
compareTo方法return 0。
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。
也种方式也成为元素的自然顺序,或者叫做默认顺序。
TreeSet的第二种排序方式:
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。
Collection定义了集合框架的共性功能
添加:add(e)、addAll(collection);
删除:remove(e)、removeAll(collection)、clear();
判断:contains(e)、isEmpty();
获取:iterator()、size();
获取交集:retainAll();
集合变数组:toArray();
List特有方法,凡是可以操作角标的方法都是该体系特有的方法
增加:add(index,element)、addAll(index,Collection);
删除:remove(index);
设置:set(index,element);
查询:get(index)、subList(from,to)、istIterator()、int indexOf(obj)、ListIterator listIterator();
Set集合的功能与Collection是一致的。
Iterator接口
所有实现了Collection接口的容器都有一个iterator方法用以返回一个实现了Iterator接口的对象;
Iterator对象称为迭代器,方便的实现了容器内的元素遍历操作;
Iterator接口主要方法如下:
booleanhasNext() 如果仍有元素可以迭代,则返回 true。
Enext() 返回迭代的下一个元素。
voidremove() 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
Iterator常用代码体现:
Collection
for(iterator
{
String s = i.next();
}
泛型:JDK1.5版本以后出现新特性,用于解决安全问题,是一个类型安全机制。
好处:
将运行时期出现问题ClassCastException,转移到了编译时期,方便于程序员解决问题,让运行时问题减少,安全,并且避免了强制转换麻烦。
泛型格式:通过<>来定义要操作的引用数据类型。
泛型一般在集合框架类中使用。
泛型的限定:
?extends E: 可以接收E类型或者E的子类型。上限。
?super E: 可以接收E类型或者E的父类型。下限。
Map集合:该集合存储键值对,一对一对往里存,而且要保证键的唯一性。
添加put(K key, V value) 、putAll(Map m)
删除clear()、 remove(Object key)
判断containsValue(Object value) 、containsKey(Object key) 、isEmpty()
获取get(Object key) 、size() 、values() 、entrySet() 、keySet()
Map
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的。jdk1.0.效率低。
|--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
|--TreeMap:底层是二叉树数据结构。线程不同步,可以用于给map集合中的键进行排序。
Set底层就是使用了Map集合。
遍历map集合的两种方式
Set
所有可以迭代方式取出所有的键,在根据get方法,获取每一个键对应的值。
Map集合的取出原理:将map集合转成set集合,在通过迭代器取出。
Set
Iterator
while(i.hasNext())
{
String key = i.next();
System.out.println(key);
String value = map.get(key);
System.out.println(value);
}
Set
而这个关系的数据类型就是Map.Entry,Entry其实就是Map中的一个static内部接口。
Set
Iterator
while(i.hasNext())
{
Map.Entry
String value = me.getValue();
System.out.println(value);
}
集合框架的工具类
Collections:集合框架的工具类,里面定义的都是静态方法。
Collections和Collection有的区别:
Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。
Collections是集合框架中的一个工具类,该类中的方法都是静态的,提供的方法中有可以对list集合进行排序,二分查找等方法。
高级for循环
格式:
for(数据类型 变量名 : 被遍历的集合(Collection)或者数组)
{
}
对集合进行遍历,只能获取集合元素。但是不能对集合进行操作,迭代器除了遍历,还可以进行remove集合中元素的动作。
如果是用ListIterator,还可以在遍历过程中对集合进行增删改查的动作。
传统for和高级for的区别:
高级for有一个局限性,必须有被遍历的目标。
建议在遍历数组的时候,还是希望是用传统for,因为传统for可以定义脚标。