java中的集合框架
1.泛型,jdk1.5版本以后引出的一种安全机制,用于解决安全问题。
好处有两个,1.将运行时期的类型转换异常转移到编译时期,方便程序员发现问题。
2.避免强制类型转换麻烦
2.Collection
|--List 集合内的元素是有序的,元素是可以重复的,原因是存在索引。
|--ArrayList 底层数据结构采用数组形式,查询速度快,增删速度慢
|--LinkList 底层数据结构采用链表形式,查询速度慢,增删速度块
|--Vector 底层数据结构采用数组形式,查询速度很快,增删速度较慢,和ArrayList一样只是
比Collection出现的都早,另一区别是Vector是线程同步而ArrayList不同步。
枚举是Vector特有的去元素方式,现在被迭代器取代。
所谓线程不同步是在集合遍历时会用到迭代器,而在ArrayList遍历时不可以在
向集合遍历时还向集合中加入或删除元素,
|--Set 集合内的元素是无序的(存入和取出不一定是有序的),元素是不可以重复的
|--HashSet 底层数据结构采用哈希表
它是如何保证数据的唯一性那?
通过hashCode()和equals()两个方法。
实际开发时要重写两个方法,线比较hashCode()若不同则直接存进去,若相同则在进入
equals()方法比较对象,若相同则直接丢弃若不同则在在相同地址处存入。
注意,对于判断元素是否存在和删除等操作,需要比较地址和对象也就是执行hashCode()
和equals().
|--TreeSet 可以对Set集合中的元素进行排序。
底层数据结构是二叉树。
保证元素唯一性的依据:
compareTo方法return 0.
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。
也种方式也成为元素的自然顺序,或者叫做默认顺序。
TreeSet的第二种排序方式。
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
在集合初始化时,就有了比较方式。
3.Map集合:该集合存储键值对,一对一对往里存,但是要保证建的唯一性。
|---HashTable:底层是哈希表,不可以存储null建和null值,线程同步。
|---HashMap:底层是哈希表,可以存储null建和null值,该集合是线程不同步的。
Map集合去除元素的取出方式
方式一:Set<k> = map.keySet();把map中的键值取出放到Set中,
然后使用迭代器取出键值,再根据键值取出value
方式二:Set<Map.Entry<String,String>> set = map.entrySet();
Iterator<Map.Entry<String,String>> it = set.Iterator();
while(it.hasNext())
Map.Entry<String,String> me = it.next();
int key = me.getKey();
|--TreeMap:底层是二叉树,可以根据key排序,线程不同步。