黑马程序员技术交流社区
标题: 集合总结 [打印本页]
作者: huanxiang0220 时间: 2015-2-22 02:29
标题: 集合总结
1.集合体系
|---Iterable
public Iterator iterator(); 该方法定义集合获取迭代器对象的规范.
jdk5.0 出现. 为了支持增强for 新特性...
|---Collection(接口)
...
|---List(子接口)
特点: 元素在集合中角标.元素有序,元素可重复的.
|---ArrayList(实现类)
原理: 数组实现,内存地址连续,查找快,增删慢.
|---LinkedList
原理: 双向链表,内部地址不连续,查找慢(中间节点),增删快
|---Vector
jdk1.0出现, 方法名长, 线程同步(单线程性能低),底层数值实现扩容是100% 浪费内存的.
在jdk1.2 出现了集合体系,体系出出现ArrayList 替代该类.
|---Set(子接口)
特点: 无序(集合存储元素时,按照内部的规则,存储和排序),元素不可重复.
|---HashSet
hashCode equals
原理: 哈希表实现(hashtable) 就是一个数组.
该集合是如何保证元素的唯一性?, 通过元素的两个方法hashCode 和equals.
集合在存储每一个元素时,就会调用元素的hashCode方法,计算出该元素的哈希值,和集合已经存储的元素的哈希值比较,
如果不重复 ,集合就直接存储元素, 如果重复集合调用元素的equals 比较, 当equals 方法为true,集合是元素为重复的. 无法添加
|---LinkedHashSet
该集合是HashSet 的子类. 普通的HashSet 是无序的, 会打乱元素存储的顺序. 该集合会通过双向链表保存元素插入的位置.
|---TreeSet
原理: 二叉树实现. 不但可以保证元素的唯一性,还可以给元素排序.
排序方式一: Comparable
让集合中存储的元素具备比较性. 元素(对象)所属的类实现Comparable 接口, 重写compareTo 方法. 在方法内部,制定比较规则,返回正整数,负整数和0.
排序方式二: Comparator
给集合指定比较器对象. 自定义类实现Comparator 接口, 重写compare 方法, 在方法内部,进行比较,制定比较规则.
|---Iterator(接口)
定义类迭代器的规范.
public boolean hasNext();
public Object next();
public void remove();
该接口规范了迭代器具备的基本的行为(功能)
在每一个集合实现类的内部,都存在一个私有成员内部类实现了该接口.重写了方法. 保证类每一个集合类内部都存在一个迭代器类.
并且每一个集合实现类都具备一个公有的方法获取这个私有的迭代器内部类对象 public Iterator iterator();
注意:
Iterator 和Iterable 区别:
Iterable 接口:
jdk5.0出现的. 是集合体系的顶层接口.
只有一个方法, 规范了获取迭代器的基本行为.
Iterator 接口:
jdk1.2 出现. 在集合实现类的内部实现类该接口.
三个方法, 规范了迭代器的基本行为.
任务:
Collection
?
List
?
Set
?
集合.
尽量多的方式遍历出集合中的所有元素.
2.泛型:
ArrayList<泛型类型> list=new ArrayList<泛型类型>();
注意: 泛型类型不能是基本数据类型. 必须是类类型(引用类型)
集合声明了泛型之后,仍然可以存储基本数据类型的原因是jdk5.0出现了自动装箱.
泛型的好处:
一. 解决运行时异常
集合声明和泛型类型之后,只能存储该类型的元素. 就不需要取出元素时,进行类类型转换, 就不会出现运行时异常(ClassCastException)
二. 取出元素不需要转型了.
存储元素时,集合的泛型类型声明的是什么,取出元素的类型就是什么.
3.Map集合.
Collection
一次存储一个对象作为集合的一个元素...
程序更复杂的需求.
需要保存对象和对象之间的关系的. 如何保存?
贪吃蛇游戏:
配置信息: key value
高 10
宽 20
集合特殊,一次可以存储2个对象, 并保存这个对象之间一一对应的映射关系...
key value
学号 <->学生
身份证号 <->人
查看文档:
该集合Map 和Collection 体系不同,一次存储2个对象.这两个对象在Map集合中称之为键(key)和值(value)
该集合key 不能重复(唯一的), 值和键之间的映射是一一对应的.
Map 接口的方法:
增
put(K key, V value)
一次添加两个对象键(左)和值(右),作为map 集合的一个元素.
putAll(Map m)
删
remove(Object key)
clear()
查
get(Object key)
isEmpty()
size()
containsKey(Object key)
containsValue(Object value)
改
put(K key,V value);
如果K 在集合中存在, 就是修改的效果. 旧值和键解除对应关系,键和新值建立关系. 并返回旧值...
键是唯一的,不能修改的. 能修改的是,键对应的value值.
其他:
values()
取出所有的值. 返回的是一个Collection .存储了map 所有的值.
keySet()
取出所有的键.
entrySet()
问题:
map 集合,取出集合中的所有的元素...
迭代器. 增强for ... toArray...
作者: 书生灬流年 时间: 2015-2-22 06:51
谢谢分享!!!
作者: a410709560 时间: 2015-2-22 12:06
谢谢楼主分享!
作者: huangchunwei 时间: 2015-2-22 12:31
学习学习。
作者: 苏安东 时间: 2015-2-22 16:50
谢谢分享!!
作者: Ansel 时间: 2015-2-22 20:10
look look!
作者: 血色@残阳 时间: 2015-2-22 22:39
比较详细呀
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |