集合框架总结二

来源:互联网 发布:saber软件下载 编辑:程序博客网 时间:2024/04/30 11:11

List集合特有的迭代器,listIteratoriterator的子接口。

在迭代时不可以通过集合对象的方法操作集合中的元素,因为会发生并发性异常

所以,在迭代器时,只能用迭代器来操作元素,可是iterator方法是有限的,如果想要其他的操作如添加,修改等,就要使用其子接口listIterator

该接口只能通过listlistIterator方法获取

List的常见子类对象

List

|---ArrayList:底层的数据结构使用的是数组结构 特点:查询速度很快,但是增删很慢,线程不同步

|---LinkedList:底层使用的是链表数据结构 特点:增删速度很快,查询稍慢

|---Vector:底层是数组数据结构 线程同步,被arrayList替代了

Enumeration 枚举

枚举就是vector特有取出方式。java教程下载

枚举和迭代时一样的,因为枚举的名称以及方法的名称都过长,所以被迭代器取代了,枚举就郁郁而终了。

LinkedList 链接列表

linkedList特有方法:

getFirst()

getLast()

获取元素 但是不删除元素

removeFirst()

removeLast()

获取元素 而且删除元素,如果集合中没有元素,会出现NoSuchElementException

jdk1.6出现了替代方法

offerFirst()

peekFirst()

pollFirst()

练习:使用linkedList模拟一个堆栈或者队列数据结构

public class LinkedTest {

/**

* @param args

*/

public staticvoid main(String[] args) {

Duizhan dl = new Duizhan();

dl.myAdd("java001");

dl.myAdd("java002");

dl.myAdd("java003");

dl.myAdd("java004");

while (!dl.nonull()) {

System.out.println(dl.myGet());

}

}

class Duizhan

{

private LinkedListlink;

Duizhan()

{

link = newLinkedList();

}

public void myAdd(Object obj)

{

link.addFirst(obj);

}

public Object myGet()

{

return link.removeLast();

}

public boolean nonull()

{

return link.isEmpty();

}

}

}

Set元素是无序的,元素不可以重复

无序指的是存入和取出的顺序不一定一致

有序指的是怎么存入进去的怎么取出来

Set

|---HashSet:底层数据结构是哈希表

hashSet是如何保证元素唯一性的呢?

是通过两个方法hashcode()equals()来完成的

如果元素的hashcode()值相同,才会判断equals是否为true

如果元素的hashcode()不同,不会调用equals

注意:对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcodeequals方法。

Set:无序,不可以重复

|--HashSet:数据结构式哈希表。线程非同步

保证元素唯一性的原理:判断元素的hashcode值是否相同

如果相同,还会继续元素的equals方法,是否为true

|---TreeSet:可以对set集合中的元素进行排序。

底层数据结构式二叉树,保证元素唯一性的依据是compareTo方法是return 0

TreeSet排序的第一种方式:让元素自身具备比较性。元素需要实现comparable接口,覆盖compareTo方法,这种方式也称为元素的自然排序 也叫元素的默认排序。

TreeSet的第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是所需要的。这时就需要让集合自身具备比较性。在集合一初始化时就有了比较方式(参与构造函数)。

当元素自身不具备比较性,或者具备的比较性不是所需要的,这时就需要让容器自身具备比较性。定义比较器,将比较器对象作为参数传递给TreeSet集合的构造函数

当两种排序都存在的时候 以比较器为主。

定义比较器的方式:

定义一个类,实现comparator接口,覆盖compare方法。

泛型:jdk1.5版本以后出现的新特性,用于解决安全问题 是一个安全机制。

好处一:将运行时期出现的问题classCastException方便于程序员解决问题。让运行时的问题少,安全。

好处二:避免强制转换的麻烦。

在使用java提供的对象时,什么时候写泛型呢?

通常在集合框架中很常见,只要见到<>就要定义泛型。其实<>就是用来接收类型的。当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。

原创粉丝点击