---------------------- 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
首先,集合框架包括接口(如List、Set和Queue)和实现这些接口的具体类(如ArrayList、LinkedList和HashSet)。这些接口定义了对数据的操作,而具体类则提供了实现。例如,ArrayList是一个动态数组,适合随机访问,...
黑马程序员提供的这篇关于泛型的学习注意点,结合了源码分析和工具应用,旨在帮助开发者深入理解并有效运用泛型。下面将详细阐述泛型的主要知识点: 1. 泛型的基本概念: 泛型是Java SE 5.0引入的新特性,主要用于...
集合框架与泛型是Java编程语言中的核心概念,它们极大地提高了代码的可读性、安全性和效率。在Java中,集合框架是一组接口和类,它们提供了存储和操作对象的统一方式。泛型则是Java 5引入的一个特性,用于在编译时...
集合框架和泛型是Java编程中的核心概念,对于理解和编写高效、可维护的代码至关重要。在Java中,集合框架提供了一种组织和管理对象的方式,而泛型则为集合提供了类型安全性和更强的编译时检查。下面我们将深入探讨这...
10. **CollectionHomework**:这个文件可能包含了关于集合框架和泛型的习题解答,涵盖了上述各个知识点的实际应用,通过解题可以帮助巩固理论知识并提升实践能力。 通过学习和练习这些内容,你可以深入理解Java集合...
8. **集合框架**:介绍ArrayList、LinkedList、HashSet、HashMap等容器的使用,以及泛型的概念。 9. **多线程**:讲解如何创建和管理线程,以及同步机制。 10. **反射**:讨论如何在运行时动态获取类信息并进行操作...
**集合框架与泛型**是Java编程语言中的核心特性,对于初学者来说,理解并熟练掌握这两个概念至关重要。Java集合框架是一组接口和类的集合,它们提供了在Java中存储和管理对象的方法。泛型则是Java SE 5.0引入的新...
集合框架的核心在于它的一系列接口和实现类,这些接口和类允许程序员以面向对象的方式来处理数据,极大地提高了代码的可读性和可维护性。在集合框架中,泛型机制的引入则进一步提升了类型安全性和代码的简洁性。 ...
例如,我们可以通过反射创建一个未知类型的集合,然后利用泛型的边界类型进行操作。这样在运行时可以根据实际需求动态地处理各种类型的数据,同时保持类型安全。此外,反射还可以用于实现一些泛型无法做到的事情,...
泛型是Java 5引入的一项创新特性,极大地增强了集合框架的安全性和效率。本讲解将深入探讨这两个主题,以及与之相关的枚举类型。 首先,Java集合框架包括List、Set、Queue等接口,以及ArrayList、LinkedList、...
详细的介绍了集合框架的用法,及其语法规则,剖析了使用的使用注意事项,帮助更牢靠的掌握集合框架的知识及泛型内容。谢谢
### C# 2.0 泛型编程初级入门教程 #### 一、引言 随着.NET Framework 2.0 的发布,C# 语言引入了一系列重要的新特性,其中泛型编程便是最为突出的一个。泛型编程允许开发人员编写类型安全且可重用的组件,而无需...
### 泛型与集合类知识点总结 #### 一、泛型简介 - **定义**:泛型是Java SE 5.0引入的新特性,它允许程序员在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。 - **作用**: - ...
在"黑马程序员_Java基础辅导班教程课件[第01期]第10天"中,我们聚焦于Java编程语言的基础知识,这是一门面向初学者的课程,旨在帮助学员快速掌握Java的核心概念。通过这个阶段的学习,学员将能够理解并运用Java的...
集合框架的设计遵循了面向对象的原则,通过接口定义了一组标准的操作,而具体的实现则由不同的类完成,这样可以灵活地选择最适合应用场景的集合类型。 迭代器接口是遍历集合元素的主要工具,它提供了`hasNext()`和`...
Java泛型是Java编程语言中一个强大的特性,它允许在定义类、接口和方法时使用类型参数,从而实现参数化类型。泛型的主要目标是提高代码的类型安全性和重用性,减少类型转换的麻烦,并在编译时捕获可能的类型错误。...
在IT行业中,泛型是Java、C#等编程语言中的一种强大的特性,它允许程序员在定义数据结构或方法时引入类型参数,以提高代码的复用性和安全性。本篇文章将深入探讨“泛型的使用进阶”,包括泛型缓存、泛型类、泛型方法...