黑马程序员_java基础6-集合框架Collection和泛型
来源:互联网 发布:阿里云代理商申请 编辑:程序博客网 时间:2024/06/06 03:59
------ android培训、java培训、期待与您交流! ----------
@@(day14)Collection和泛型****************************************************************
数据多了用对象存,对象多了用集合存。
数组和集合类都是容器,有何不同?
--数组虽然也可以存储对象,但长度是固定的,集合长度是可变的。
--数组中可以存储基本数据类型,集合只能存储对象。
==集合只用于存储对象,集合长度可变,集合可以存储不同类型的对象。
Collection || Map(键值对)
-List有序,可重复 -Set无序,不可重复||
--*ArrayList底层数组,不同步 --*HashSet哈希表 ||-*HashMap哈希表 -TreeMap二叉树
--*LinkedList底层链表 --TreeSet二叉树 ||
--Vector同步
Collection
|-List:元素是有序的,元素可以重复。因为该集合体系有索引。
||--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
||--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
||--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、
||--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashcode值不同,不会调用equals。
********复写public int hashCode()和public boolean equals(Object obj)
注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
||--TreeSet:可以对Set集合中的元素进行排序。
底层数据结构是二叉树。
保证元素唯一性的依据:
compareTo方法return 0.
********TreeSet排序的第一种方式:让元素自身具备比较性。
implements Comparable接口,覆盖public int compareTo(Object obj)方法。
也种方式也成为元素的自然顺序,或者叫做默认顺序。
********TreeSet的第二种排序方式。
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。
注意:ArrayList构造一个初始容量为10的空列表,不够用的话,依次%50增加。节约空间。
Vector构造一个初始容量为10的空列表,不够用的话,依次%100增加。
@@Collection定义了集合框架(List和Set)的共性功能。
1,添加
add(Object e);//增加任意类型的元素,实际存放的是元素的地址。
addAll(collection);//增加一个集合的元素。
2,删除
remove(e);//移除元素
removeAll(collection);//移除交集
clear();//清空
3,判断。
contains(e);//判断是否包含某元素
isEmpty();//判断是否为空
4,获取
for(Iterator it = al.iterator(); it.hasNext() ; )
{sop(it.next());}
size();//集合的大小,元素个数
5,获取交集。
retainAll();//取出交集
6,集合变数组。
toArray();//转成数组
1,add方法的参数类型是Object。以便于接收任意类型对象。
2,集合中存储的都是对象的引用(地址)。**********
@@接口Iterator<迭代器><迭代器><迭代器><迭代器>
/*
Itr是AbstractList的内部类并实现了Iterator接口。
public Iterator<E> iterator() {
return new Itr();
}
private class Itr implements Iterator<E>{...}
*/
======for(Iterator it = al.iterator(); it.hasNext() ; )//打印元素
{sop(it.next());}
boolean hasNext()
如果仍有元素可以迭代,则返回 true。
E next()
返回迭代的下一个元素。
void remove()
从迭代器指向的 collection 中移除迭代器返回的最后一个元素
什么是迭代器呢?
其实就是集合的取出元素的方式。
如同抓娃娃游戏机中的夹子。
迭代器是取出方式,会直接访问集合中的元素。
所以将迭代器通过内部类的形式来进行描述。
通过容器的iterator()方法获取该内部类的对象。
@@List特有的方法:带角标操作的函数。
@@List集合判断元素是否相同,只依赖元素的equals方法。自定义对象最好对其进行复写。
@@其他的集合判断元素是否相同则不是只依据元素的equals方法。。
增-----------
void list.add(int index,E element)在指定位置添加元素
boolean list.addAll(index,Collection);index - 将指定 collection 的第一个元素所插入位置的索引(即在原集合中插入的位置)
删-----------
E list.remove(int index)删除index角标上的元素
remove(E e);//移除元素(底层调用了元素的equals方法)###
改-----------
E list.set(int index,E element) (特有)
查-----------
contains(e);(底层调用了元素的equals方法)###
E list.get(int index)返回指定位置的元素
List<E> list.subList(int fromIndex,int toIndex)
ListIterator<E> listIterator(int index)
int list.indexOf(e):获取指定元素的位置。(底层调用了元素的equals方法)###
在迭代时,不可以通过集合对象list的方法来操作集合中的元素。
因为会发生ConcurrentModificationException异常。
所以,在迭代器时,只能用迭代器的方法来操作元素,可是Iterator接口中的方法是有限的,
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。
该接口只能通过List集合的listIterator方法获取。
@@ListIterator接口==List集合特有的迭代器<迭代器><迭代器><迭代器><迭代器><迭代器>
List集合特有的迭代器。ListIterator是Iterator的子接口。
======for(ListIterator it = al.listIterator(); it.hasNext() ; )//打印元素
{sop(it.next());}
void add(E e)
将指定的元素插入列表(可选操作)。
boolean hasNext()
以正向遍历列表时,如果列表迭代器有多个元素,则返回 true(换句话说,如果 next 返回一个元素而不是抛出异常,则返回 true)。
boolean hasPrevious()
如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。
E next()
返回列表中的下一个元素。
int nextIndex()
返回对 next 的后续调用所返回元素的索引。
E previous()
返回列表中的前一个元素。
int previousIndex()
返回对 previous 的后续调用所返回元素的索引。
void remove()
从列表中移除由 next 或 previous 返回的最后一个元素(可选操作)。
void set(E e)
用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。
总结下:
ListIterator中有:
hasNext,Next,nextIndex
hasPrevious,previous,previousIndex
增add(E e新元素)
删remove()
改set(E e新元素)
for(ListIterator li = al.Listiterator(); li.hasNext() ; )//取出元素
{sop(li.next());}
@@Vector,JDK1.0的类,同步,容量10+%100... (JDK1.2开始Java Collections Framework,被ArrayList替代)
特有方法:(带element的都是,早期1.0的方法)
addElement(E obj)
...
@@枚举就是Vector特有的取出方式。
Enumeration<E> elements()
返回此向量的组件的枚举。
boolean hasMoreElements()
测试此枚举是否包含更多的元素。
E nextElement()
如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。
发现枚举和迭代器很像。
其实枚举和迭代是一样的。
因为枚举的名称以及方法的名称都过长。
所以被迭代器取代了。
枚举郁郁而终了。
@@LinkedList 特有方法
addFirst()
addLast()
getFirst()
getFirst()
返回元素
removeFirst() ==》 JDK1.6后 pollFirst()
removeLast() ==》 JDK1.6后 pollLast()
//集合中无元素则抛出异常NoSuchElementEception ==>集合中无元素返回null
返回删除的元素
@@Set(具有Collection接口的方法)元素无序,元素不可重复!只用迭代器操作元素。
@@在添加元素,判断和删除时,先看hashCode值,再equals比较是否同一个对象
HashSet要重写hashCode方法和equals方法
public int hashCode()******************************
{
return this.name.hashCode()+this.age*33;
}
public boolean equals(Object obj)******************
{
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;//有泛型也得强转。
return this.name==p.name && this.age==p.age;
}
- 黑马程序员_java基础6-集合框架Collection和泛型
- 黑马程序员_java基础6-集合框架Collection和泛型
- 黑马程序员_Java基础_集合框架成员Collection
- 黑马程序员---集合框架(Collection)和泛型
- 黑马程序员_Java集合Collection
- 黑马程序员_java基础集合框架
- 黑马程序员_Java基础Day14_集合框架
- 黑马程序员_Java基础_集合框架
- 黑马程序员_Java基础_集合框架
- 黑马程序员_java基础_集合框架
- 黑马程序员_java集合框架(java collection framework)
- 黑马程序员_java语言_集合框架(Collection)
- 黑马程序员_java基础之集合(collection及其子类)
- 黑马程序员_java基础_集合(Collection和List、Set)
- 黑马程序员_Java集合-Collection<T>接口
- 黑马程序员_java集合框架与泛型详解
- 黑马程序员_java集合框架
- 黑马程序员_java集合框架
- Notepad++ 启动时不打开最近关闭的文件
- 解决多浏览器文件下载乱码
- 指针笔记
- 通过实现一个TableView来理解iOS UI编程
- 初学Java 环境搭建
- 黑马程序员_java基础6-集合框架Collection和泛型
- 用OpenSceneGraph实现的NeHe OpenGL教程 - 第二十四课
- Hibernate继承关系映射(了解),实现反向生成数据库表的过程
- win7装系统后 免重装系统开启ACHI模式
- MFC获取屏幕大小及像素信息
- 【Leetcode】String to Integer (atoi)
- 结构体
- 长梦
- hdu4521 线段树or变形LIS