-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
Collection接口:
|---List有序,可以存储重复元素
|----ArrayList数组实现,线程不安全,效率高
|----Vector 数组实现,线程安全,效率低
|----LinkedList链表实现,线程不安全,效率高
|---Set无序,不能存储重复元素
|---HashSet哈希表实现,线程不安全,效率高
保证唯一性:hashcode()和equals()方法
|--LinkedHashSet链表,哈希表实现,线程不安全,效率高
|----TreeSet 树实现,线程不安全,效率高
对元素排序的,要排序,就要比较,比较方式:
1,自然排序:我们的类要实现Comparable接口,重写comparaTo()方法。
2,我们的类不需要实现任何接口,自定义一个比较器,实现Comparator接口,重写compare()方法
实例化TreeSet时,传递自定义比较器对象。
Map接口:双列集合,使用键值对存储
|----HashMap哈希表实现,线程不安全,效率高
保证键的唯一性,同Hashset
|---TreeMap树实现,线程不安全,效率高。
对键的排序,同TreeSet
|----LinkedHashMap链表、哈希表实现,线程不安全的,效率高。
|----Hashtable哈希表实现,线程安全,效率低。
数据结构:
1,数组:查询快。增删慢
2,链表:查询慢,增删快
3,栈:后进先出
4,队列:先进先出
5,哈希表:综合了数组和链表的优点,查询、增删都很快
6,第一个存储的作为根节点,再存储元素时,要跟已存元素比较,比已存元素大,存在当前节点的右侧,比已存元素小,存在当前节点的左侧。如果相等则不存。
集合的选择:(如何选择使用哪种集合?)
需要单列还是双列?
单列:Colllection:
有序:List:
经常查询,但不经常修改:ArrayList (单线程,快)Vector(多线程,慢)
经常修改元素的数量:LinkedList
无序:Set:
是否需要排序?
不要排序:HashSet(无序) LinkedHashSet(有序)
需要排序:TreeSet
双列:Map:
不要排序:HashMap,LinkedHashMap
排序:TreeMap
各种集合的遍历方式:
Collection:
1,toArray()
2,迭代器 iterator
3,增强for
|---List
4,使用Collection的size()和List的get(int indec)方法使用普通for循环
List特有的迭代器ListIterator
|----Set
(无)
Map:
1,KeySet()-->遍历Set(键)
2,entrySet()-->遍历Set<Map.Entry>
普通for循环和增强for循环的区别:
增强for循环没有普通循环变量
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------