---------------------- android培训
、java培训
、期待与您交流! ----------------------
集合框架
集合类
数据多了存在对象内
,
对象多了存在集合内
.
集合只用于存储对象
.
集合长度可变
,
集合可以存储不同类型的对象
.
参阅顶层创建
集合中存储的都是对象的引用或者地址
.
Iterator it=al.iterator();
迭代
什么是迭代器
?
其实就是集合的取出元素的方式
.
Collection
List:
元素是有序的
,
元素可以重复
.
因为该集合体系有索引
.
ArrayList
底层的数据结构使用的是数组结构
特点
:
查询速度快
,
增删稍慢
.
线程不同步
LinkdList
底层使用的是链表数据结构
.
特点
:
增删速度度
,
查询慢
.
Vector
底层是数组数据结构
.
线程同步
.
枚举就是
Vector
特有的取出方式
.
List:
元素是有序的
,
元素可以重复
.
因为该集合体系有索引
.
Set:
元素无序的
,
不可以重复
.
该集合中没有索引
.
List:
特有方法
.
凡是可以操作角标的方法都是该体系特有的方法
.
List
集合特有的迭代器
.ListIterator
是
Iterator
的子接口
.
在迭代时
,
不可以通过集合对象的方法操作集合中的元素
.
因为会发生并发修改异常
.
所以
.
在迭代时
,
只能用迭代器的方法操作元素
.
可是
Iterator
的方法有限的
,
只能
,
判断取出
,
删除的操作
.
如果想要其他的操作如添加
,
修改等
,
就要使用其子接口
ListIterator
该接口只能通过
List
集合的
ListIterator
方法获取
.
List
常见的三种
:
ArrayList:
底层的数据结构使用的是数组结构
,
特点
:
查询快
,
但是增删稍慢
.
线程不同步
,
相对
Vector
效率高
.
LinkedList:
底层的是链表结构
.
特点
:
增删速度快
,
查询稍慢
.
Vector:
底层是数组数据结构
,
线程同步
.
ArrayList:
可变长度数组
.
List
的选择
|
底层实现
|
特性
|
适用场合
|
Vector/Stack
|
|
|
版本较低,避免使用
|
ArrayList
|
数组
|
访问快速
|
默认选择;
需要执行大量的随机访问
|
LinkedList
|
双向链表
|
插入和删除代价低廉
|
要经常在表中插入或删除元素
|
最佳做法:将
ArrayList
做为默认首选,只有当需要额外的功能,或者当程序的性能因为经常从表中间进行插入和删除而变差的时候,才去选择
LinkedList
。如果元素数量固定,既可以使用
List
,也可以使用数组。
LinkedList:
特有方法
addFirst();
addLast();
getFirst();
getLast();
获取元素
,
不删除元素
.
removeFirst();
removeLast();
获取元素
.
删除该元素
.
如果集合中没有元素会出现
NoSuchElementException
在
JDK1.6
出现了替代方法
.
offerFirst();
offerLast();
peekFirst();
PeekLast();
获取元素
,
元素不被删除
.
如果没有元素返回
null.
pollFirst();
pollLast();
获取元素
,
元素被删除
.
如果没有元素返回
null.
Set:
元素是无序的
(
存入和取出的顺序不一定一致
),
元素不可以重复
.
Set
集合功能和
Collection
是一致的
.
set
常见的子类
,:
Set
的特性:
不保存重复元素,元素必须实现
equals()
方法;
不保证维护元素的次序。
|
底层实现
|
特性
|
适用场合
|
HashSet
|
散列
|
查询速度最快;
元素必须定义
hashCode()
方法
|
默认选择
|
TreeSet
|
二叉树
|
可以从
Set
中提取有序的序列;
元素必须实现
Comparable
接口
|
|
Hashset:
底层数据结构是哈希表
.
TreeSet:
可以对
Set
集合中的元素进行排序
.
底层数据结构是二叉树
,
保证元素唯一性的依据是
compareTo
方法
return0.
HashSet
是如何保证元素唯一性的呢
?
是通过元素的两个方法
,hashcode
和
equals
来完成
.
如果元素的
HashCode
值相同
,
才会判断
equals
是否为
true.
Treeset:
可以对
Set
集合中的元素进行排序
,
按字母先后
排序时
,
当主要条件相同时
,
一定要判断次要条件
.
按年龄排序
.TreeSet
Student implements Comparable
TreeSet
排序的第一种方式
.
让元素自身具备比较性
.
元素需要实现
Comparable
接口
,
覆盖
compareTo
方法
.
第二种排序方式
.
当元素自身不具备比较性时
,
或者具备的比较性不是所需要的
.
这时就需要让集合自身具备比较性
.
在集合初始化时
.
就有了比较方式
当两种排序都存在时
.
以比较器在为主
.
TreeSet
(
Comparator
<? super
E
> comparator)
构造一个新的空
TreeSet
,它根据指定比较器进行排序。
泛型
为了解决安全问题
,JDK1.5
后出现的新特性
.
1.
将运行时期出现问题
ClassCastException
转移到编译时期
.
方便程序员解决问题
.
安全
.
2.
避免了强制转换的麻烦
.
泛型格式
:
通过
< >
来定义要操作的引用数据类型
.
在使用
java
提供的对象时
,
什么时候写泛型呢
?
通常在集合框架中很常见
.
只要见到
< >
就要定义泛型
.
其实
< >
就是用来接收类型的
.
当使用集合时将集合中要存储的数据类型作为参数传递到
< >
中即可
.
/*
泛型类
class Utils
<QQ>
{
private QQ q;
public void setObject(QQ q)
{
this.q=q;
}
public QQ getObject()
{
return q;
}
}
什么时候定义泛型类
当类中要操作的引用数据类型不确定的时候
,
早期定义
Object
来完成扩展
.
现在定义泛型来扩展
.
泛型类定义的泛型
,
在整个类中有效
,
被方法使用
.
那么泛型类的对象明确要操作的具体类型后
,
所有要操作的类型就已经固定了
为了让不同方法可以操作不同类型
,
而且类型还不确定
.
那么可以将泛型定义在方法上
.
class Demo
{
public
<T> void show(T t)
{
System.out.println("show:"+t);
}
public
<Q> void print(Q q)
{
System.out.println("print:"+q);
}
}
*Demo d=new Demo();
*d.show("haha
");
*d.show(new Integer(4));
*d.print("heihei
");
还可以泛型类中套其他泛型方法
.
方法的类型与泛型类的类型不用一致
.
特殊之处
:
静态方法不可以访问类上定义的泛型
.
如果静态方法操
泛型定义在接口上
.
Interface Inter
<T>
{
void
show(T t);
}
class InterImpl implements Inter<String>
{
public
void show(String t)
{
System.out.ptrintln("show:"+t);
}
}
*InterImpl i=new InterImpl();
*i.show("haah
");
*/
*
另一种
*class InterImpl<T> implements Inter
<T>
*
public
void show (T t)
*
{
*
SOP("show:"+t);
*
}
泛型限定
上限
下限两种
?
叫通配符也可以理解为占位符
.
泛型的限定
? extends E:
可以接收
E
类型或者
E
类型的子类型
.\
上限
(
上面限定不能变下面可以扩展
)
? super E:
可以接收
E
类型或者
E
的父类型
.
下限
.
map
集合
.
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
map
集合的存是用
put
方法来实现的
.
V
|
put
(K key,
V value)
将指定的值与此映射中的指定键关联
|
重要方法
entySet()
和
keySet()
|
底层实现
|
特性
|
HashMap
|
散列表
哈希表数据结构
|
插入和查询的开销是固定的;
可以通过构造方法设置容量和负载因子,调整性能
,
允许
null
值和
null
键
,
不同步
|
Hashtable
|
哈希表
|
不可以存入
null
键
null
值
.
是同步的集合
|
TreeMap
|
二叉树
|
总是保证有序;不同步
,
可以给
map
集合中的键进行排序
.
可以通过
subMap()
方法返回一个子树
|
Map
集合和
Set
很像
,
其实
Set
底层就是使用的
Map
集合
.
map
集合的两种取出方式
:
1.
keyset:
将
map
中所有的键存入到
set
集合
,
用
set
集合迭代方式取出所有的键
,
在获取每一个键对应的值
.
2.
entrySet
()
返回此映射中包含的映射关系的
Set
视图
返回的是
Set<Map.Entry<K,V>>
集合
.
---------------------- android培训
、java培训
、期待与您交流! ----------------------
分享到:
相关推荐
BDQN ACCP 7.0 Java《集合框架及泛型》学习资料.part1
集合框架及泛型的介绍和基础理解,方便大家了解集合框架及泛型。
集合框架及泛型资料
C__2.0中泛型编程初级入门教程 C__2.0中泛型编程初级入门教程
集合框架及泛型下载资料
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1490705
学士后Java集合框架和泛型课后习题答案 希望能够帮助大家更好的学习JAVA,这些知识还是比较基础的,并没有多大难度 一起共同进步
泛型集合解释的非常好泛型集合泛型集合泛型集合解释的非常好泛型集合泛型集合泛型集合解释的非常好泛型集合泛型集合泛型集合解释的非常好泛型集合泛型集合
详细的介绍了集合框架的用法,及其语法规则,剖析了使用的使用注意事项,帮助更牢靠的掌握集合框架的知识及泛型内容。谢谢
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1491352
集合框架以及泛型总结
java集合 框架 泛型,枚举,有PPT详解,并有实例
java数据结构,泛型与集合框架,有各种集合运算的算法,Collection接口介绍,数组方法介绍等
尚硅谷_JavaSE_第12章_集合与泛型_扩展练习_附带参考答案.md
泛型与集合类
泛型的声明,泛型的使用,泛型的特点,泛型约束,泛型方法,泛型类,泛型缓存
非常详细的解释,望各位快来下载啊,不错的选择啊
day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda表达式 day08_File类、递归 day09_字节流、字符流...
java高级课程相关的课件,有助于初学者参看!
泛型缓存的使用,泛型类,泛型方法,泛型委托的意义,泛型的使用场景