集合框架

来源:互联网 发布:耽美小说完结推荐知乎 编辑:程序博客网 时间:2024/04/29 00:47

集合框架:

数据多了要封装成对象 对象多了也要封装,封装成数组和集合

集合比数组的优势是:集合是可变长度。

 集合和数组的区别:

1:数组是固定长度的;集合可变长度的。

2:数组可存基本数据类型和引用数据类型;集合只存引用数据类型。

3:数组中元素为同一个数据类型;集合可以是不同数据类型。

 

集合容器在不断向上抽取过程中。出现了集合体系。

在使用一个体系时,原则:参阅顶层内容。建立底层对象。

黑马程序员_复习_Day10 - 九五二七 - 今天

 

数据结构:就是容器中存储数据的方式。

黑马程序员_复习_Day10 - 九五二七 - 今天

 

Collection

    |--List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。

    |--Set:无序(存入和取出顺序有可能不一致),不可以存储重复元素。必须保证元素唯一性。

黑马程序员_复习_Day10 - 九五二七 - 今天

 

迭代器

黑马程序员_复习_Day10 - 九五二七 - 今天

 

什么是迭代器呢?

其实就是集合的取出元素的方式。

如同抓娃娃游戏机中的夹子。封装到容器内部,外面提供一个操作杆,

内部夹子什么样不重要,只要知道操作杆如何使用即可

就是迭代器取出方式不重要,只要直接调用迭代器的方法iterator()就可以了

迭代器是取出方式,会直接访问集合中的元素。

所以将迭代器通过内部类的形式来进行描述。

通过容器的iterator()方法获取该内部类的对象

每个容器都有自己的iterator方法(只有自己的才了解取出方式)

这样Iterator it = al.iterator();直接调用即可。

黑马程序员_复习_Day10 - 九五二七 - 今天

 

List接口:

List本身是Collection接口的子接口,具备了Collection的所有方法。

凡是可以操作角标的方法都是List体系特有的方法。

List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。

    |--ArrayList:底层的数据结构是数组,线程不同步,ArrayList替代了Vector,查询元素的速度非常快。

    |--LinkedList:底层的数据结构是链表,线程不同步,增删元素的速度非常快。

    |--Vector:底层的数据结构就是数组,线程同步的,Vector无论查询和增删都巨慢。

黑马程序员_复习_Day10 - 九五二七 - 今天

        黑马程序员_复习_Day10 - 九五二七 - 今天

 ListIterator
黑马程序员_复习_Day10 - 九五二七 - 今天

 

hasPrevious方法

黑马程序员_复习_Day10 - 九五二七 - 今天

       黑马程序员_复习_Day10 - 九五二七 - 今天

枚举

黑马程序员_复习_Day10 - 九五二七 - 今天

LinkedList 链接列表[链表]

LinkedList:特有方法:

addFirst();

addLast();

getFirst();不能回去指定位置元素,没有索引,但是可以获取头和尾

getLast();

获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException

removeFirst();

removeLast();

获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException

JDK1.6出现了替代方法。

offerFirst();

offerLast();

peekFirst();

peekLast();

获取元素,但不删除元素。如果集合中没有元素,会返回null

pollFirst();

pollLast();

获取元素,但是元素被删除。如果集合中没有元素,会返回null

黑马程序员_复习_Day10 - 九五二七 - 今天

 

   add – offer [ɑfЗ]提供;邀请   

   get — peek  [pik]偷看;一瞥     

remove — poll  [pol] 修剪;民意调查

这些都是LinkedList特有的,ArrayList中没有offer peek

 

注意:对于list集合,底层判断元素是否相同,其实用的是元素自身的equals方法完成的。所以建议元素都要复写equals方法,建立元素对象自己的比较相同的条件依据。

 

使用LinkedList模拟一个堆栈或者队列数据结构。

queue[kju]队列 queen[kwin]女皇

黑马程序员_复习_Day10 - 九五二七 - 今天

 黑马程序员_复习_Day10 - 九五二七 - 今天
 去除ArrayList集合中的重复元素
黑马程序员_复习_Day10 - 九五二七 - 今天
 

关于是否可以在迭代器中连续调用next()

黑马程序员_复习_Day10 - 九五二七 - 今天

 在迭代循环中next调用一次就要hasNext判断一次

 ArrayList去除重复元素,元素为自定义对象

黑马程序员_复习_Day10 - 九五二七 - 今天

       黑马程序员_复习_Day10 - 九五二七 - 今天

 

contains()的基本原理也是调用equals

List集合判断元素是否相同依据的是元素的equals方法

 

演示remove也是底层调用equals方法

黑马程序员_复习_Day10 - 九五二七 - 今天

 

一般List容器使用ArrayList,因为很少有频繁的增删操作,多数为查询。

如果增删操作频繁用LinkedList


0 0
原创粉丝点击