集合框架:
数据多了要封装成对象 对象多了也要封装,封装成数组和集合
集合比数组的优势是:集合是可变长度。
集合和数组的区别:
1:数组是固定长度的;集合可变长度的。
2:数组可存基本数据类型和引用数据类型;集合只存引用数据类型。
3:数组中元素为同一个数据类型;集合可以是不同数据类型。
集合容器在不断向上抽取过程中。出现了集合体系。
在使用一个体系时,原则:参阅顶层内容。建立底层对象。
![黑马程序员_复习_Day10 - 九五二七 - 今天](http://img2.ph.126.net/P7g8QgpTqaqjvlHuX3CFqQ==/6597545855192354081.png)
数据结构:就是容器中存储数据的方式。
![黑马程序员_复习_Day10 - 九五二七 - 今天](http://img1.ph.126.net/GLhducePHa-3UePB_ZWG-A==/6608527777329261118.png)
Collection:
|--List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
|--Set:无序(存入和取出顺序有可能不一致),不可以存储重复元素。必须保证元素唯一性。
![黑马程序员_复习_Day10 - 九五二七 - 今天](http://img1.ph.126.net/PUW1LO9cVo83bRl-roYVgg==/6608478299306010154.png)
迭代器
![黑马程序员_复习_Day10 - 九五二七 - 今天](http://img1.ph.126.net/PaM34Jxai4f3oHoW67Kbww==/6608179232144272300.png)
什么是迭代器呢?
其实就是集合的取出元素的方式。
如同抓娃娃游戏机中的夹子。封装到容器内部,外面提供一个操作杆,
内部夹子什么样不重要,只要知道操作杆如何使用即可
就是迭代器取出方式不重要,只要直接调用迭代器的方法iterator()就可以了
迭代器是取出方式,会直接访问集合中的元素。
所以将迭代器通过内部类的形式来进行描述。
通过容器的iterator()方法获取该内部类的对象
每个容器都有自己的iterator方法(只有自己的才了解取出方式),
这样Iterator it = al.iterator();直接调用即可。
![黑马程序员_复习_Day10 - 九五二七 - 今天](http://img1.ph.126.net/2pUlW9hsnbvawV34KTGo-A==/3668463371570417281.png)
List接口:
List本身是Collection接口的子接口,具备了Collection的所有方法。
凡是可以操作角标的方法都是List体系特有的方法。
List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
|--ArrayList:底层的数据结构是数组,线程不同步,ArrayList替代了Vector,查询元素的速度非常快。
|--LinkedList:底层的数据结构是链表,线程不同步,增删元素的速度非常快。
|--Vector:底层的数据结构就是数组,线程同步的,Vector无论查询和增删都巨慢。
![黑马程序员_复习_Day10 - 九五二七 - 今天](http://img2.ph.126.net/_4pEInTu9MOB8exdjtAi0g==/6608870824957125275.png)
![黑马程序员_复习_Day10 - 九五二七 - 今天](http://img2.ph.126.net/ttwuNHKd9mlJfBn6djpxNQ==/6608777366468765372.png)
hasPrevious方法
![黑马程序员_复习_Day10 - 九五二七 - 今天](http://img1.ph.126.net/_diBJWtTd5iMIPDpIab6ig==/6608192426283808930.png)
枚举
![黑马程序员_复习_Day10 - 九五二七 - 今天](http://img1.ph.126.net/m6PIyJn529l5NihjiilPFw==/6608428821282759451.png)
LinkedList 链接列表[链表]
LinkedList:特有方法:
addFirst();
addLast();
getFirst();不能回去指定位置元素,没有索引,但是可以获取头和尾
getLast();
获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
removeFirst();
removeLast();
获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException
在JDK1.6出现了替代方法。
offerFirst();
offerLast();
peekFirst();
peekLast();
获取元素,但不删除元素。如果集合中没有元素,会返回null。
pollFirst();
pollLast();
获取元素,但是元素被删除。如果集合中没有元素,会返回null。
![黑马程序员_复习_Day10 - 九五二七 - 今天](http://img2.ph.126.net/VRL6NdsUaYRVzWgKPTIDEw==/6608201222376833429.png)
add – offer [ɑfЗ]提供;邀请
get — peek [pik]偷看;一瞥
remove — poll [pol] 修剪;民意调查
这些都是LinkedList特有的,ArrayList中没有offer peek等
注意:对于list集合,底层判断元素是否相同,其实用的是元素自身的equals方法完成的。所以建议元素都要复写equals方法,建立元素对象自己的比较相同的条件依据。
使用LinkedList模拟一个堆栈或者队列数据结构。
queue[kju]队列 queen[kwin]女皇
![黑马程序员_复习_Day10 - 九五二七 - 今天](http://img2.ph.126.net/oRiZQJ_qoDkKHve8T2JH0g==/6608685007492031360.png)
去除 ArrayList 集合中的重复元素
![黑马程序员_复习_Day10 - 九五二七 - 今天](http://img2.ph.126.net/LNlJM4anuSZZH7avyOQRnA==/6608615738259482198.png)
关于是否可以在迭代器中连续调用next()
![黑马程序员_复习_Day10 - 九五二七 - 今天](http://img2.ph.126.net/DcFYu0-DwWrbpE2l1LV2YQ==/6608813650352481839.png)
在迭代循环中next调用一次就要hasNext判断一次
ArrayList去除重复元素,元素为自定义对象
![黑马程序员_复习_Day10 - 九五二七 - 今天](http://img1.ph.126.net/PnvEgfFViqtColv5TEkOVQ==/6608783963538532198.png)
contains()的基本原理也是调用equals
List集合判断元素是否相同依据的是元素的equals方法
演示remove也是底层调用equals方法
![黑马程序员_复习_Day10 - 九五二七 - 今天](http://img1.ph.126.net/rZeDhEfTrD9rxysAoI8q_Q==/6608500289538565741.png)
一般List容器使用ArrayList,因为很少有频繁的增删操作,多数为查询。
如果增删操作频繁用LinkedList