黑马程序员_Collection及泛型
来源:互联网 发布:网络基本原理动画演示 编辑:程序博客网 时间:2024/06/10 01:27
黑马程序员_Collection及泛型
----------------------<a href="http://edu.csdn.net/heima"target="blank">android培训</a>、<a href="http://edu.csdn.net/heima"target="blank">java培训</a>、期待与您交流! ----------------------
集合只能存储对象 可变长度 可存储不同类型的对象
数组也可以存储对象 还可以存储基本数据类型 固定长度 指定类型
Collection集合
Collection的子接口List和Set
---List:元素是有序的,元素可以重复,因为该集合体系有索引。
-----ArrayList:底层是的数据结构是数组结构。特点:查询速度很快,但是增删稍慢。 线程不同步。
-----LinkedList:底层是的数据结构是链表结构。特点:增删速度很快,查询速度慢。
-----Vector:底层是数组数据结构。 线程同步。被ArrayList替代了。
---Set:元素师无序的(存入和取出的顺序不一定一致),元素不可以重复。线程不同步。
-----HashSet:底层数据结构是哈希表。Set集合的功能和Collection是一致的。
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashcode值不同,不会调用equals。
注意: 对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
-----TreeSet:可以对Set集合中的元素进行排序。
底层数据结构是二叉树。
保证元素唯一性的依据:
compareTo方法return 0.
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。
这种方式也称为元素的自然顺序,或者叫做默认顺序。
TreeSet的第二种排序方式。
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。在集合初始化时,就有了比较方式。
定义比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。
定义一个类,实现Comparator接口,覆盖compare方法。
当两种排序都存在时,以比较器为主。
记住,排序时,当主要条件相同时,一定判断一下次要条件。
枚举就是Vector特有取出方式
枚举和迭代是一样的,因为枚举的名称以及方法的名称都过长,所以被迭代器取代了。
List:
特有方法。凡是可以操作角标的方法都是该体系特有的方法。
增
add(index,element);
addAll(index,Collection);
删
remove(index);
改
set(index,element);
查
get(index):
subList(from,to);
listIterator();
intindexOf(obj):获取指定元素的位置。
ListIteratorlistIterator();
List集合判断元素是否相同,依据是元素的equals方法。
List集合特有的迭代器。ListIterator是Iterator的子接口。
在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。
所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。
该接口只能通过List集合的listIterator方法获取。
add方法的参数类型是Object。以便接受任意类型对象。
集合中存放的都是对象的引用(地址)
al1.retainAll(al2); 取交集,al1中只会保留和al2中相同的元素。
迭代器:就是集合的取出元素的方式
LinkList特有方法:
addFirst(); addLast();
getFirst(); getLast();
获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
removeFirst(); removeLast();
获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException
在JDK1.6出现了替代方法。
offerFirst(); offerLast();
peekFirst(); peekLast();
获取元素,但不删除元素。如果集合中没有元素,会返回null。
pollFirst(); pollLast();
获取元素,但是元素被删除。如果集合中没有元素,会返回null。
泛型:JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制。
指定容器传入参数类型
好处
1. 将运行时期出现问题ClassCastException,转移到了编译时期。 方便于程序员解决问题。让运行时问题减少,安全。
2. 避免了强制转换麻烦。
泛型格式:通过<>来定义要操作的引用数据类型。
在使用java提供的对象时,什么时候写泛型呢?
通常在集合框架中很常见,只要见到<>就要定义泛型。
其实<> 就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
泛型类
什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候,
早期定义Object来完成扩展。
现在定义泛型来完成扩展。
泛型方法
泛型类定义的泛型,在整个类中有效。如果被方法使用,
那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。
为了让不同方法可以操作不同类型,而且类型还不确定。
那么可以将泛型定义在方法上。
特殊之处:
静态方法不可以访问类上定义的泛型。
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
泛型限定:用于泛型扩展用。
? 通配符。也可以理解为占位符。
泛型的限定;
? extends E: 可以接收E类型或者E的子类型。上限。
? super E: 可以接收E类型或者E的父类型。下限
----------------------<a href="http://edu.csdn.net/heima"target="blank">android培训</a>、<a href="http://edu.csdn.net/heima"target="blank">java培训</a>、期待与您交流! ----------------------
- 黑马程序员_Collection及泛型
- 黑马程序员_Collection
- [黑马程序员]集合_Collection示例
- 黑马程序员_Collection框架知识点
- 黑马程序员_Collection基本框架
- 黑马程序员_Collection&List接口笔记
- 黑马程序员_Collection集合之Set
- 黑马程序员_Collection集合之List
- 黑马程序员_Collection类集框架和Collections工具类
- 黑马程序员__Java泛型及泛型反射应用
- 黑马程序员_Java泛型的概述及使用
- 黑马程序员----JAVA基础----泛型及工具类
- 黑马程序员-体验泛型
- 《黑马程序员》泛型复习
- 黑马程序员之泛型
- 黑马程序员-泛型总结
- 黑马程序员-----关于泛型
- 黑马程序员-泛型延伸
- 电路设计中容易忽略的几个问题
- linux安装jsoncpp
- 如何查看web服务器的名称和版本号
- Struts2 - Adding Properties to the pageContext
- 黑马程序员_集合
- 黑马程序员_Collection及泛型
- Google输入法调用抛出JNI错误
- Read and Write File Code
- android 4.0.3 usb插拔提示音播放问题分析
- 简单介绍一下C#正则表达式
- USERDB 表分析----(2)
- WPF效果- CoverFlow
- RTX51 Tiny中容易混淆的问题
- 20120426——TNS-12535: TNS: 操作超时 &IMP-00058: ORACLE error 12560 encountered