黑马程序员 集合框架(二)
来源:互联网 发布:python exit code非0 编辑:程序博客网 时间:2024/05/16 09:01
------- android培训、java培训、期待与您交流! ----------
1:泛型(次重点)
(1)不确定的类型,广泛的类型。
(2)基本格式:<数据类型> 注意了:数据类型必须是引用数据类型
(3)泛型的定义方式
A:泛型定义在类上
class Demo<QQ>
{
public void show(QQ qq){}
}
B:泛型定义在方法上
class Demo
{
public <BM> void show(BM bm){}
}
C:泛型定义在接口上
interface Inter<QQ>
{
public abstrace void show(QQ qq);
}
(4)泛型的使用(重点)
A:一般,泛型就用于集合类中。
B:好处:
**把运行过程中可能出现的ClassCastException转到了编译期。
**避免了多态的安全隐患
2:Set接口
Collection
|--List 元素有序(存储顺序和取出顺序一致),可重复。
|--ArrayList
底层数据结构是数组,线程不安全。
增删慢,查询快。
|--Vector
底层数据结构是数组,线程安全。
增删慢,查询快。但是,线程安全,效率就低。所以查询也慢。
|--LinkedList
底层数据结构是链表,线程不安全。
增删快,查询慢。
|--Set 元素无序(存储顺序和取出顺序不一致),不可重复。
|--HashSet
底层数据结构是哈希表。线程不安全。
如果保证元素的唯一性呢?
A:首先根据hashCode值判断。
B:如果hashCode值不同,那么,这就是不同的元素。直接存储。
如果hashCode值相同,那么,会继续根据equals方法进行判断,
根据自己的需求来决定元素是否相同。如果相同,就不存储。否则,存储。
一般,用HashSet的时候,要重写hashCode和equals方法。
|--LinkedHashSet
底层数据结构是链表和哈希表。
链表用于保证元素有序,哈希表用于保证元素唯一。
|--TreeSet
底层数据结构是二叉树,线程不安全。
如何保证元素的排序呢?两种方式
A:让元素本身具备比较性
实现Compareable接口中的compareTo方法。
B:让集合具备比较性
实现Comparator接口中的compare方法。
以后到底用哪个集合呢?
A:如果要元素唯一,就用Set。否则,用List。
B:如果元素唯一并且要排序用TreeSet,否则,用HashSet。
C:如果元素可重复,且考虑线程问题,用Vector。
否则,用ArrayList或者LinkedList。
如果要求,增删快,那么,考虑LinkedList。
如果要求,查询快,那么,考虑ArrayList。
D:当你什么都不清楚的时候,就使用ArrayList。
Array:想到数组,就应该想到数组的索引。
Link:想到链表,就应该想到增删快。最好能想到addFirst。
Hash:想到哈希表,就应该想到元素的hashCode和equals方法。
Tree:想到二叉树,就应该想到排序。最好能想到两个接口Compareable和Comparator
1:Map接口(重点)
(1)是键值对的集合。
(2)和Collection接口中的集合的区别
A:Map数据是成对出现的,必须有键和值成对出现
B:Collection的数据是单列的
(3)Map接口中的功能
A:存储元素
put(Object key,Object value)
B:删除元素
remove(Object key)
C:判断
isEmpty()
containsKey(Object key)
containsValue(Object value)
D:长度
size()
E:获取元素
Object get(Object key)
Collection<V> values()
Set<K> keySet()
Set<Map.Entry<K,V>> entrySet()
(4)通过HashMap创建Map集合对象,存储字符串和自定义对象。(重点)
Map<String,String> map = new HashMap<String,String>();
map.put("it001","haha");
map.put("it002","hehe");
map.put("it003","xixi");
//值的集合
Collection<String> c = map.values();
Iterator<String> it = c.iterator();
while(it.hasNext())
{
String value = it.next();
sop(value);
}
//键的集合
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
while(it.hasNext()
{
String key = it.next();
sop(key);
}
//遍历Map的元素
//第一种
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
while(it.hasNext()
{
String key = it.next();
String value = map.get(key);
sop(key+"***"+value);
}
//第二种
Set<Map.Entry<String,String>> setMap = map.entrySet();
Iterator<Map.Entry<String,String>> it = setMap.iterator();
while(it.hasNext())
{
Map.Entry<String,String> me = it.next();
String key = me.getKey();
String value = me.getValue();
sop(key+"***"+value);
}
2:Map的体系结构(重点)
Map
存储值
put(Object key,Object value)
获取元素
Object get(Object key)
Collection<V> values()
Set<K> keySet()
Set<Map.Entry<K,V>> entrySet()
|--Hashtable
底层是哈希表结构
线程安全的,并且键和值不能为null。
|--HashMap
底层是哈希表结构
线程不安全的,键和值可以为null。
|--LinkedHashMap
底层是链表和哈希表
线程不安全
|--TreeMap
底层是二叉树
线程不安全的
3:Collections类和Arrays类的使用。(重点)
A:Collections
排序
二分查找
发转
B:Arrays
把数组变成字符串输出
排序
二分查找
回顾:集合框架的整体架构
Collection:
|--List
--ArrayList
--Vector
--LinkedList
|--Set
--HashSet
|--LinkedHashSet
--TreeSet
Comparable,Comparator
Collections
Map:
|--HashMap
|--LinkedHashMap
|--Hashtable
|--Properties
|--TreeMap
- 黑马程序员_集合框架(二)
- 黑马程序员 集合框架(二)
- 黑马程序员集合框架实例(二)
- 黑马程序员--集合框架(二)Set
- 黑马程序员:java集合框架(二)
- 黑马程序员-----------集合框架(二)
- 黑马程序员_JAVA_集合框架(二)
- 黑马程序员----集合框架(二)
- 黑马程序员-集合框架(二)
- 黑马程序员--Java集合框架(二)
- 黑马程序员_集合框架(二)
- 黑马程序员_集合框架(二)
- 黑马程序员---集合框架(二)
- 黑马程序员 集合框架二
- 黑马程序员---Java集合框架(二)--Map
- 黑马程序员——集合框架(二)
- 【黑马程序员】集合框架(二)泛型 第十六天
- 黑马程序员_Java基础_集合框架(二)_15
- 实习日志(5):Flex页面“跳转”
- (经典)C语言测试:想成为嵌入式程序员应知道的0x10个基本问题
- zoj 1205.Martian Addition
- 2.最基础Linux设备驱动程序:HelloWorld
- reason: ‘Could not instantiate class named NSLayoutConstraint’
- 黑马程序员 集合框架(二)
- C和C++笔试面试题汇总
- Ubuntu下LaTeX中文环境配置
- Oracle事务隔离级别
- HDU 1224 Free DIY Tour
- 一见钟情!Java闭包
- 预见未来
- 日记
- Win32与MFC,精华贴!!!值得拥有