黑马程序员技术交流社区
标题:
集合框架的体系整理
[打印本页]
作者:
q312092921
时间:
2016-4-1 22:56
标题:
集合框架的体系整理
单列集合
Collection
--- 接口 (规则, 扩展)
add(E e) 添加元素
remove(E e) 移除元素
contain() 是否包含
size() 获取长度
List
(特点: 存储有序,有索引,可以重复)
ArrayList
---- 数组数据结构 查询快
get(); 根据索引获取元素,直接根据索引
LinkedList
--- 链表数据结构 增删快
addFirst()
addLast();
get(); ---- 从头或者从尾查
Vector
---- 底层也是数组 (因为是线程安全的加了个一个同步,查询效率低)
获取元素的时候返回的是一个枚举
Set
(特点: 存储无序,无索引,不能重复)
HashSet
---- 底层数据结构是哈希表
不能重复,无序
我把数据都放进去了,那我怎么取? 能不能通过for get(index)
没有索引,要用到迭代器.
存储自定义对象,保持唯一:
重写hashCode和equals方法
先执行hashCode,若结果一样,则再调用equals方法
TreeSet
------ 底层是二叉树 (放进二叉树的集合,就可以帮你排序,默认是字典顺)
一般非自定义元素比如: 数字, 字符串,放进去就可以自然排序
自定义对象: Person Student 要有序怎么办?
第一种方法: 自定义对象实现 comparable接口 让这个自定义对象具有比较性
第二种方法:创建该TreeSet集合的时候就传入一个比较器对象Comparator, 让这个集合容器能够排序 -- 匿名内部类的方式传入该接口的子类对象
Iterator
--- 帮助没有索引的集合遍历元素,相当于一个指针一个一个去扫描东西
1)获取迭代器对象
Set set = new HashSet();
Iterator it = set.iterator();
2)判断
it.hasNext(); 返回的是一个布尔值,当有元素的时候为true, 当没有元素的时候为false
3)获取集合元素
it.next() ; 获取集合中的元素
双列集合
Map
--- 接口 ---双列,集合中存储的不是一个,而是一对
entrySet() ---- 获取一个键值对的集合,返回值类型是一个Set,Set里面包含多个键值对对象
键值对对象: Map.Entry 接口中的子接口接口 ; 还有一个 Entry类,实现了Map.Entry , 重写了里面的方法
keySet() ---- 获取到的是一个Set的键的集合, Set(E e), 键是什么类型,获取到的Set中存的就是什么!
put(K key, V value) ---添加,成对添加key和value
get(Object key) ---- 根据键获取值,只有键,咱就能获取到他的值
values() ---- 获取值的集合 Collection的集合
HashMap
---具体的类;底层哈希表
put(K key, V value) 键和值能不能为null ; 键和值都能为null
遍历:
1)遍历获取键的集合,根据键获取值
2)获取键值对的集合,再遍历键值对集合,获取每一个键值对对象,再获取里面的key和value
K getKey()
V getValue()
Hashtable
--- 底层哈希表
面试题: HashMap和Hashtable的区别:
1)HashMap是线程不安全的,Hashtable是线程安全的
2)HashMap可以存储null键和null值,Hashtable不能存储null键和null值
TreeMap
---- 二叉树,有特定 <key value>
排序: 对谁排序
值针对键进行排序,跟value没关系
----key是不是非自定义的
按照字典顺序给排序
----key是不是自定义对象
两种方式排序
方式一: 让自定义对象实现一个comparable接口, 让自定义对象自己具有比较性
方式二: 创建TreeMap集合的时候就构造一个具有排序的集合; 创建对象时,传入一个比较器对象(传入comparator接口的子类对象,还可以传入一个匿名内部类)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2