黑马程序员——高新技术---Java基础-集合特点和数据结构总结
2015-07-28 21:13
459 查看
[b]-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
[/b]
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培训、期待与您交流!
-------
[/b]
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培训、期待与您交流!
-------
相关文章推荐
- #无私分享《传智播客2011版。net平台c#视频》全套哦30.7G
- 怎样学习java,漫谈java学习之路
- 设置jdk环境变量时lib中的rt.jar ,dt.jar ,tool.jar是什么,作用是什么
- java基础知识笔记
- java中web应用中重定向与转发的区别
- java基础篇---枚举详解
- java基础数据类型包装类
- equals与null
- Java.基础(学习笔记)
- 一个简单的加密解密程序
- 黑马程序员---Java面向对象编程思想小结
- 黑马程序员---java面向抽象/接口编程
- 黑马程序员---java单例设计模式
- 黑马程序员---java字符串常用类
- 黑马程序员宣传语征集大赛
- 黑马程序员-------关于今天的一个程序学习心得
- JAVA基础-IO流
- 黑马程序员----把Eclipse修改为黑色主题颜色方案
- c基础语法(一)---流程控制与函数
- C基础语法(二)---复杂数据类型(数组和字符串)