首页 > 代码库 > 集合--Collection

集合--Collection

迭代器:Iterator接口

interface Iterator
{
boolean hasNext();
Object next();
}

//获取集合中的对象
Iterator<E> iterator()

所有的内部类都是实现了Iterator接口的内部类
内部类可以直接操作集合中的对象

/*
Iterator ite = col.iterator();
while(ite.hasNext())
{
//获得一个对象
Object obj = ite.next();
System.out.println(obj);
}
for(int i = 0;i<col.size();i++)
{

}

for(Iterator ite = col.iterator();ites.hasNext());)
{

}

while(!col.isEmpty())
{
col.remove();//返回被删除的对象
}

*/

/*
存储多个类型的对象:
Obejct[] arr = new Object[10];
数组的缺陷是:
数组的容量固定
*/

集合:(Collection接口)
java.util.*;
可以存储不同类型的对象,而且随着存储的对象的增加容量自动扩大

Collection:
**iterator():获取集合中的对象
--List:
存储的对象是有序的
集合中对象的顺序和添加对象的顺序是一致的,可以重复的
List特有的方法都是可以操作下标的方法
--ArrayList:
底层使用的数据结构是数组
线程不安全的
查找速度快,增删速度慢
--LinkedList:
底层使用的数据结构是链表
线程不安全的
查找速度慢,增删速度快
--Vector:
底层使用的数据结构是数组
线程安全的(被ArrayList替代)
查找速度快,增删速度慢,被ArrayList替代
--Set:
存储的对象是无序的,不可重复的
--HashSet:
底层使用的数据结构是哈希表
线程不安全
--TreeSet:
底层使用的数据结构是二叉树
线程不安全


Vector:
动态数组
早期使用Enumeration接口进行枚举
Enumeration e = v.elements();

while(e.hasMoreElements())
{
Object obj = e.nextElements();
System.out.println(obj);
}

LinkedList:
**addFirst:
**addLast:

**getFirst://获取的元素不存在出现 NoSuchElementException
**getLast:

**removeFirst://
**removeLast:

从jdk 1.6之后出现以下方法:

**offerFirst:
**offerLast:

**peekFirst://获取元素不存在返回null
**peekLast:

**linkFirst:
**linkLast:

/*
使用LinkedList实现队列

入队--把对象存入集合
**addLast()
出队--把对象从集合删除
**removeFirst()
判断队列是否为空
**isEmpty()

*/

ArrayList:

/*
去掉集合中重复的对象

新建一个list2
遍历旧集合
如果list2中不包含这个对象,添加
**contains(obj)
如果list2中包含,不添加

*/

/*
contains判断是否包含某个对象的依据?

依据boolean equals(Object obj)方法的返回值

*/

/*
直接输出List<Class>的话,输出的是Class的hash值

解决:
在class中定义:
public String toString()
{
return ...;

}

*/

/*
去掉List<class>中相同内容的class

在class中重写equals方法

public boolean equals(Object obj)
{

if(!(obj instanceof Student))//如果obj不是Student类型
throws new RuntimeException("类型错误");

Student stu = (Student)obj;

return this.age = stu.age && this.name.equals(stu.name);

}

*/

HashSet:
在使用add方法添加对象时就保证了对象的唯一

/*
HashSet无序的原因

数据结构是哈希表,根据哈希算法得到位置,导致的无序

*/

/*
HashSet保证对象唯一的方式

在添加对象时,先比较得到对象的hash值和集合中对象的hash值分别进行比较
如果和所有对象的hash值都不相同,将对象直接添加到集合
如果相同,使用equals()方法比较内存地址是否相同
如果相同,认为是同一对象,不添加
如果不同,认为是不同的对象,加入集合
int hashCode()
boolean equals()

*/

/*
去掉Hash<class>中相同内容的class

在class中重写hashCode 和 equals方法

public int hashCode()
{
return name.hashCode() + age * 33;
}

public boolean equals(Object obj)
{

if(!(obj instanceof Student))//如果obj不是Student类型
throws new RuntimeException("类型错误");

Student stu = (Student)obj;

return this.age = stu.age && this.name.equals(stu.name);

}
*/

TreeSet:
在使用add方法添加对象时会对添加的对象进行排序
排序方式一:
集合中对象所属的类实现了Comparable接口中的compareTo()方法
排序方式二:

/*
TreeSet保证对象唯一的方式:
集合中对象所属的类实现了Comparable接口中的compareTo()方法
compatreTo()方法的返回值是0


*/

/*
去掉TreeSet<class>中相同内容的class

在class中重写compareTo()

public int compareTo(Object obj)
{

if(!(obj instanceof Student))//如果obj不是Student类型
throws new RuntimeException("类型错误");

Student stu = (Student)obj;

int num = this.age - stu.age;

return num == 0 ? this.name.compatrTo(stu.name) : num;
}
*/

集合--Collection